2010-02-06 13 views
191

w MS SQL Server, można zrobić:Co jest odpowiednikiem PostgreSQL dla ISNULL()

SELECT ISNULL(Field,'Empty') from Table

Ale w PostgreSQL pojawia się błąd składni. Jak emulować funkcjonalność ISNULL()?

+1

Nie, nie mogę tego zrobić w MSSQL. Ten kod się nie skompiluje. 'ISNULL' przyjmuje dwa argumenty i zwraca drugi, pierwszy to' null', w przeciwnym razie pierwszy. – GSerg

+0

@GSerg, masz rację. naprawiono to. –

+0

Gserg Byron i tak można zobaczyć tutaj przykładu z mojego komputera SELECT ISNULL (a.FechaEntregada, '') jako test z dbo.Amonestacion https://msdn.microsoft.com/en-us/ library/ms184325.aspx – Juan

Odpowiedz

338
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias 

Albo bardziej idiomatyczne:

SELECT coalesce(field, 'Empty') AS field_alias 
+37

+1 dla 'coalesce'. (P.S. Możesz to zrobić również w MS SQL Server.) –

+1

Są jednak inne przypadki użycia IS NULL, więc dobrze jest znać oba. –

+26

Myślę, że warto zauważyć, że jest to "koalescencja", która jest w standardzie SQL, z 'isnull' będącym funkcją specyficzną dla MS, która zasadniczo jest" koalescencyjna "z tylko dwoma parametrami. – GSerg

-7

utworzyć 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 będzie ona działać.

Możesz tworzyć różne wersje z różnymi typami parametrów.

+24

Proszę, nikt tego nie robi. Zamiast tego używaj funkcji koalesce(), aby Twoje DBA Cię nie nienawidziło. – Jordan

58

Zastosowanie COALESCE() zamiast:

SELECT COALESCE(Field,'Empty') from Table; 

Funkcjonuje podobnie jak ISNULL, choć zapewnia większą funkcjonalność. Coalesce zwróci pierwszą niezerową wartość na liście. Zatem:

SELECT COALESCE(null, null, 5); 

zwraca 5, natomiast

SELECT COALESCE(null, 2, 5); 

powraca 2

zlewają wezmą dużą liczbę argumentów. Nie ma udokumentowanego maksimum. Testowałem 100 argumentów i udało się. To powinno wystarczyć w większości sytuacji.

16

Jak emulować funkcję ISNULL()?

SELECT (Field IS NULL) FROM ... 
+4

To emuluje dokładną funkcjonalność isnull, nie wiesz, dlaczego jest odrzucane. – smackshow

+3

@artur Nie rozumiesz, jak działa isnull. – datashaman

+0

Najlepsza odpowiedź na pytanie, oczywiście. To wyrażenie jest pełnym równoważnikiem ISNULL(). COALESCE() jest bardzo inteligentny i interesujący, ale nie może wykonać ISNULL(), gdy jest zamknięty. – Skrol29

10

Spróbuj:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name 
+1

To jest miłe, ponieważ obejmuje przypadek, gdy pole tekstowe NIE ma wartości NULL, ale także "puste". – soulia

Powiązane problemy