PostgreSQLでISNULL()に相当するものは何ですか


255

MS SQL-Serverでは、次のことができます。

SELECT ISNULL(Field,'Empty') from Table

しかし、PostgreSQLでは構文エラーが発生します。ISNULL()機能をエミュレートするにはどうすればよいですか?


1
MSSQLでそれを行うことはできません。そのコードはコンパイルされません。ISNULL2つの引数を取り、2番目は最初のisを返しnull、それ以外の場合は最初を返します。
GSerg、2010

@GSerg、あなたは正しい。修正しました。
バイロンウィットロック

GsergとByronはい、ここで確認できます。私のPCの例SELECT isnull(a.FechaEntregada、 '')をdbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx
フアン

回答:


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

またはもっと慣用的な:

SELECT coalesce(field, 'Empty') AS field_alias

49
の+1 coalesce。(PS MS SQL Serverでもできます。)
アリソンR.

2
IS NULLを使用するケースは他にもあるので、両方を知っておくとよいでしょう。
カイルバット

30
それはcoalesceSQLの標準であり、isnull本質的にcoalesce2つのパラメーターのみを持つMS固有の関数であることは注目に値します。
GSerg、2010

4
Coalesce()も型の昇格を適切に処理し(UNION SELECTとまったく同じように)、IsNull()は処理しません。
ErikE 2010

2
ISNULLとCOALESCEは同じではないことに注意してください。IsNullは結果タイプをargument1のタイプに強制しますが、coalesceは各引数にそれぞれのタイプを使用します。isnullを合体で検索して置き換えるだけの場合、多くのエラーが発生する可能性があります...
Stefan Steiger

76

COALESCE()代わりに使用:

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

ISNULLより多くの機能を提供しますが、のように機能します。Coalesceは、リスト内の最初のnull以外の値を返します。したがって:

SELECT COALESCE(null, null, 5); 

5を返しますが、

SELECT COALESCE(null, 2, 5);

2を返します

Coalesceは多数の議論を引き受けます。文書化された最大値はありません。私はそれを100個の引数でテストし、それは成功しました。これは、ほとんどの状況で十分です。


24

ISNULL()機能をエミュレートするにはどうすればよいですか?

SELECT (Field IS NULL) FROM ...

4
これはisnullの正確な機能をエミュレートしていますが、なぜ無効にされているのかは不明です
smackshow

もちろん、質問に対する最良の答えです。この式はISNULL()と完全に同等です。COALESCE()は非常にスマートで興味深いのですが、閉じている間はISNULL()を実行できません。
Skrol29 2014

17
私はISNULLあなたのコメンターが何を参照しているのかわかりませんfield IS NULLが、ブール値を提供ISNULLしますが、SQL Serverでは次のように動作しますCOALESCE:非NULL値の1つを返します。この答えはひどく間違っています。ドキュメントを参照してください:ISNULL
jpmc26 2015

10
これらのコメンターは、「In MS SQL Server、...」で始まる質問に気付かなかったMySQLユーザーだと思います。MySQLには、単一の引数を取り、0または1を返すISNULL()関数があります。T-SQLのバージョンは2つの引数があり、COALESCEまたはOracleのNVLのように動作します。
デビッドノハ

1
greatvovan、これが元のポスターの意図であったかどうかにかかわらず、人々が望んでいるのは「フィールドがnullかどうかを確認するにはどうすればよいですか」に対する答えであり、必ずしも「ISNULL関数がどのように機能するか」ではありません。それが私にも当てはまり、この答えはそのために最適です。
Freeman Helmuth

15

試してください:

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

3
これは、テキストフィールドがnullではなく、「空」である場合をカバーするので便利です。
スーリア

-9

次の関数を作成します

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'

そして、それはうまくいきます。

異なるパラメータタイプで異なるバージョンを作成することができます。


28
誰もこれをしないでください。代わりに、coalesce()を使用して、DBAが嫌われないようにしてください。
ジョーダン

1
postgresはisnullを追加して、誰も嫌いにならないようにしてください。
Eric Twilegar、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.