ISNULL () için PostgreSQL eşdeğeri nedir


256

MS SQL Server'da şunları yapabilirim:

SELECT ISNULL(Field,'Empty') from Table

Ancak PostgreSQL'de bir sözdizimi hatası alıyorum. ISNULL()İşlevi nasıl taklit edebilirim ?


1
Hayır, MSSQL'de bunu yapamazsınız. Bu kod derlenmeyecek. ISNULLiki argüman alır ve ikincisi birincisidir null, aksi takdirde birincisidir.
GSerg

@GSerg, haklısın. bunu düzelttim.
Byron Whitlock

Gserg ve Byron evet burada görebilirsiniz PC den örnek SELECT isnull (a.FechaEntregada, '') dbo.Amonestacion bir msdn.microsoft.com/tr-tr/library/ms184325.aspx
Juan

Yanıtlar:


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

Veya daha deyimsel:

SELECT coalesce(field, 'Empty') AS field_alias

49
İçin +1 coalesce. (PS Bunu MS SQL Server'da da yapabilirsiniz.)
Alison R.

2
IS NULL kullanmak için başka durumlar da var, bu yüzden ikisini de bilmek güzel.
Kyle Butt

30
Ben aslında sadece iki parametre ile MS-özgü bir işlev olmak coalesce, SQL standardı olduğunu belirtmek gerekir . isnullcoalesce
GSerg

4
Coalesce () aynı zamanda tür tanıtımını da düzgün bir şekilde işler (tıpkı UNION SELECT'in yaptığı gibi), IsNull () bunu yapmaz.
ErikE

2
ISNULL ve COALESCE'in aynı olmadığını belirtmek gerekir. IsNull, sonuç türünü argüman1 türüne zorlarken, coalesce her bağımsız değişken için ilgili türleri kullanır. İsnull kelimesini bir araya getirip değiştirirseniz, potansiyel olarak birçok hata alabilirsiniz ...
Stefan Steiger

76

COALESCE()Bunun yerine kullanın :

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

Daha ISNULLfazla işlevsellik sağlamasına rağmen, çok benzer şekilde çalışır. Coalesce listedeki ilk null olmayan değeri döndürür. Böylece:

SELECT COALESCE(null, null, 5); 

5 döndürür

SELECT COALESCE(null, 2, 5);

2 döndürür

Coalesce çok sayıda argüman alacak. Belgelenmiş bir maksimum yoktur. 100 argüman olacağını test ettim ve başarılı oldu. Durumların büyük çoğunluğu için bu bol olmalıdır.


24

ISNULL () işlevselliğini nasıl taklit edebilirim?

SELECT (Field IS NULL) FROM ...

4
Bu, isnull'un tam işlevselliğini taklit ediyor, neden indirildiğinden emin değil
smackshow

Elbette soru için en iyi cevap. Bu ifade ISNULL () öğesinin tam eşdeğeridir. COALESCE () çok akıllı ve ilginçtir, ancak kapalı iken bir ISNULL () gerçekleştiremez.
Skrol29

17
Ben ISNULLyorumcular ne atıfta olduğunu bilmiyorum , ama SQL Server gibi çalışır field IS NULLise bir boole değeri verir : olmayan değerlerden birini döndürür . Bu cevap çok yanlış. Belgelere bakın: . ISNULLCOALESCENULLISNULL
jpmc26

10
Bu yorumcular, "MS SQL Server'da ..." sorusunun başladığını fark etmeyen MySQL kullanıcıları olduğundan şüpheleniyorum MySQL, tek bir argüman alan ve 0 veya 1 döndüren bir ISNULL () işlevine sahiptir. iki argüman ve COALESCE veya Oracle NVL gibi davranır.
David Noha

1
greatvovan, Bu asıl posterin amacı olsun ya da olmasın, insanların istediği şeyin "mutlaka bir alanın boş olup olmadığını nasıl kontrol ederim" cevabı olduğuna inanıyorum, "ISNULL işlevi tam olarak nasıl çalışır". Bende böyleydi ve bu cevap bunun için mükemmel.
Freeman Helmuth

15

Deneyin:

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

3
Bu, bir metin alanının boş OLMADIĞI değil, aynı zamanda 'boş' olduğu durumda da kapsadığı için güzeldir.
soulia

-9

Aşağıdaki işlevi oluşturun

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'

Ve işe yarayacak.

Farklı parametre türleriyle farklı sürümler oluşturabilirsiniz.


28
Lütfen, kimse bunu yapmaz. Bunun yerine DBA'nızın sizden nefret etmemesi için coalesce () kullanın.
Ürdün

1
lütfen kimse kimseden nefret etmiyor.
Eric Twilegar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.