In MS SQL-Server kann ich Folgendes tun:
SELECT ISNULL(Field,'Empty') from Table
Aber in PostgreSQL bekomme ich einen Syntaxfehler. Wie emuliere ich die ISNULL()
Funktionalität?
In MS SQL-Server kann ich Folgendes tun:
SELECT ISNULL(Field,'Empty') from Table
Aber in PostgreSQL bekomme ich einen Syntaxfehler. Wie emuliere ich die ISNULL()
Funktionalität?
Antworten:
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias
Oder idiomatischer:
SELECT coalesce(field, 'Empty') AS field_alias
coalesce
. (PS Sie können das auch in MS SQL Server tun.)
coalesce
um einen SQL-Standard handelt, bei dem isnull
es sich um eine MS-spezifische Funktion handelt, die im Wesentlichen coalesce
nur aus zwei Parametern besteht.
Verwenden Sie COALESCE()
stattdessen:
SELECT COALESCE(Field,'Empty') from Table;
Es funktioniert ähnlich ISNULL
, bietet jedoch mehr Funktionalität. Coalesce gibt den ersten Wert ungleich Null in der Liste zurück. So:
SELECT COALESCE(null, null, 5);
gibt 5 zurück, während
SELECT COALESCE(null, 2, 5);
gibt 2 zurück
Coalesce wird eine große Anzahl von Argumenten annehmen. Es gibt kein dokumentiertes Maximum. Ich habe es mit 100 Argumenten getestet und es ist gelungen. Dies sollte für die überwiegende Mehrheit der Situationen ausreichend sein.
Wie emuliere ich die ISNULL () -Funktionalität?
SELECT (Field IS NULL) FROM ...
Versuchen:
SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name
Erstellen Sie die folgende Funktion
CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 "
"is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'
Und es wird funktionieren.
Sie können verschiedene Versionen mit verschiedenen Parametertypen erstellen.
ISNULL
nimmt zwei Argumente und gibt zurück, das zweite ist das erstenull
, andernfalls das erste.