Apa yang setara dengan PostgreSQL untuk ISNULL ()


255

Di MS SQL-Server, saya bisa melakukan:

SELECT ISNULL(Field,'Empty') from Table

Tetapi dalam PostgreSQL saya mendapatkan kesalahan sintaksis. Bagaimana cara meniru ISNULL()fungsi?


1
Tidak, Anda tidak dapat melakukannya di MSSQL. Kode itu tidak akan dikompilasi. ISNULLmengambil dua argumen dan mengembalikan yang kedua adalah yang pertama null, jika tidak yang pertama.
GSerg

@ GS, Anda benar. memperbaikinya.
Byron Whitlock

Gserg dan Byron ya Anda dapat melihat di sini Contoh dari PC saya SELECT isnull (a.FechaEntregada, '') sebagai tes dari dbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx
Juan

Jawaban:


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

Atau lebih idiomatik:

SELECT coalesce(field, 'Empty') AS field_alias

49
+1 untuk coalesce. (PS Anda juga bisa melakukannya di MS SQL Server.)
Alison R.

2
Ada beberapa kasus lain untuk menggunakan IS NULL, jadi ada baiknya untuk mengetahui keduanya.
Kyle Butt

30
Saya pikir itu perlu dicatat bahwa itu adalah coalesceyang ada di standar SQL, dengan isnullmenjadi fungsi MS-spesifik yang pada dasarnya adalah coalescedengan hanya dua parameter.
GSerg

4
Coalesce () juga menangani promosi jenis dengan benar (persis seperti UNION SELECT), sedangkan IsNull () tidak.
ErikE

2
Perlu ditunjukkan bahwa ISNULL dan COALESCE tidak sama. IsNull memaksa tipe-hasil ke tipe argument1, sementara coalesce menggunakan tipe-tipe tersebut untuk setiap argumen. Jika Anda hanya mencari dan mengganti isnull dengan penggabungan, Anda berpotensi mendapatkan banyak kesalahan ...
Stefan Steiger

76

Gunakan COALESCE()sebaliknya:

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

Fungsinya sangat mirip ISNULL, meskipun menyediakan lebih banyak fungsi. Coalesce akan mengembalikan nilai bukan nol pertama dalam daftar. Jadi:

SELECT COALESCE(null, null, 5); 

mengembalikan 5, sementara

SELECT COALESCE(null, 2, 5);

mengembalikan 2

Coalesce akan mengambil sejumlah besar argumen. Tidak ada maksimum yang didokumentasikan. Saya mengujinya akan 100 argumen dan berhasil. Ini harus banyak untuk sebagian besar situasi.


24

Bagaimana cara meniru fungsionalitas ISNULL ()?

SELECT (Field IS NULL) FROM ...

4
Ini mengemulasi fungsionalitas yang tepat dari isnull, tidak yakin mengapa itu
diturunkan

Jawaban terbaik untuk pertanyaan itu, tentu saja. Ekspresi ini setara dengan ISNULL (). COALESCE () sangat cerdas dan menarik untuk diketahui tetapi tidak dapat melakukan ISNULL () saat ditutup.
Skrol29

17
Saya tidak tahu apa yang ISNULLAnda maksud komentator, tetapi field IS NULLmemberikan nilai boolean, sementara ISNULLdi SQL Server beroperasi seperti COALESCE: mengembalikan salah satu dari NULLnilai-nilai. Jawaban ini sangat salah. Lihat dokumentasi: ISNULL.
jpmc26

10
Saya menduga komentator ini adalah pengguna MySQL yang tidak menyadari pertanyaan dimulai dengan, "Dalam MS SQL Server, ..." MySQL memiliki fungsi ISNULL () yang mengambil argumen tunggal dan mengembalikan 0 atau 1. Versi T-SQL mengambil dua argumen dan berperilaku seperti COALESCE atau Oracle NVL.
David Noha

1
greatvovan, Apakah ini maksud dari poster asli atau tidak, saya percaya apa yang orang inginkan adalah jawaban untuk "Bagaimana saya memeriksa apakah suatu bidang adalah nol", belum tentu "Bagaimana tepatnya fungsi fungsi ISNULL bekerja". Itulah yang terjadi pada saya dan jawaban ini sangat cocok untuk itu.
Freeman Helmuth

15

Mencoba:

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

3
Ini bagus karena mencakup kasus ketika bidang teks TIDAK nol, tetapi juga 'kosong'.
soulia

-9

Buat fungsi berikut

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'

Dan itu akan berhasil.

Anda dapat membuat versi berbeda dengan tipe parameter berbeda.


28
Tolong, tidak ada yang melakukan ini. Gunakan coalesce () sebagai gantinya agar DBA Anda tidak membenci Anda.
Jordan

1
postgres tolong tambahkan isnull sehingga tidak ada yang membenci siapa pun.
Eric Twilegar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.