W MS SQL-Server mogę:
SELECT ISNULL(Field,'Empty') from Table
Ale w PostgreSQL pojawia się błąd składniowy. Jak emulować ISNULL()
funkcjonalność?
W MS SQL-Server mogę:
SELECT ISNULL(Field,'Empty') from Table
Ale w PostgreSQL pojawia się błąd składniowy. Jak emulować ISNULL()
funkcjonalność?
Odpowiedzi:
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias
Lub bardziej idiomatycznie:
SELECT coalesce(field, 'Empty') AS field_alias
coalesce
. (PS Możesz to zrobić również w MS SQL Server.)
coalesce
to standard SQL, isnull
ponieważ jest to funkcja specyficzna dla MS, która zasadniczo ma coalesce
tylko dwa parametry.
COALESCE()
Zamiast tego użyj :
SELECT COALESCE(Field,'Empty') from Table;
Działa podobnie ISNULL
, chociaż zapewnia większą funkcjonalność. Coalesce zwróci pierwszą wartość inną niż null na liście. A zatem:
SELECT COALESCE(null, null, 5);
zwraca 5, podczas gdy
SELECT COALESCE(null, 2, 5);
zwraca 2
Coalesce przyjmie wiele argumentów. Nie ma udokumentowanego maksimum. Przetestowałem to będzie 100 argumentów i udało się. To powinno wystarczyć w zdecydowanej większości sytuacji.
Jak emulować funkcjonalność ISNULL ()?
SELECT (Field IS NULL) FROM ...
Próbować:
SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name
Utwórz następującą funkcję
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'
I to zadziała.
Możesz tworzyć różne wersje z różnymi typami parametrów.
ISNULL
pobiera dwa argumenty i zwraca, że drugi to pierwszynull
, w przeciwnym razie pierwszy.