概要:この記事では、COALESCE関数を使用してPostgreSQLでNULL値を処理する方法について説明します。 例で議論されているトピックは次のとおりです。
1。 COALESCE関数とは何ですか?いくつかの注意点
2。 この記事では、COALESCE関数とは何か、そしてPostgreSQLでそれを使用する方法を理解します。
合体関数とは何ですか? COALESCEは、PostgreSQLで利用可能な条件式の1つと考えることができるシステム組み込み関数です。 Nullif、GREATEST、LEAST、COALESCEはPostgreSQLの条件式のタイプです。
COALESCE関数は、指定されたリスト内の最初のNULL以外の式を返します。 すべての引数がNULLの場合、出力としてNULLが返されます。
サポートされている構文は次のとおりです。
COALESCE(value_1,value_2,value_3,........value_n)
パラメータまたは引数は次のとおりです。
value_1,value_2,value_3,........value_n
注意点
COALESCE関数に関するいくつかのポイント:
- パラメータはNULL以外の値に対してテストされています。
- パラメータはすべて同じデータ型でなければなりません。 それ以外の場合はエラーになります。
- COALESCE関数は、引数の数に制限はありません。
- 左から右へ引数を取ります。
- Coalesce関数は、他のDBMSで利用可能なNVLやIFNULLのような同様の互換性を提供します。CASEとCOALESCEは同様の目的で使用できますが、COALESCEを使用する利点は、入力がはるかに少ないことです。
- 最初のNULL以外の値に達するとすぐにパラメータの評価を停止します。
例
1. ここでは、最初のパラメータのNULL以外の値でCOALESCEがどのように動作するかを示します。
postgres=# select coalesce (1,null,2); coalesce ---------- 1(1 row)
COALESCE関数は、最初のNULL以外の式を検索するため、残りのパ
2. NULL値が最初のパラメータである場合のCOALESCEの動作は次のとおりです。
postgres=# select coalesce (null,1,2); coalesce ---------- 1(1 row)
COALESCE関数は最初のパラメータでNULL値を見つけたので、NULLではない第二のパラ
3. 複数のNULL値を解釈する方法は次のとおりです。
postgres=# SELECT coalesce(null,null, 1, 2, 3, null, 4); coalesce ---------- 1(1 row)
この式には複数のNullがありますが、3番目のパラメータで最初のNULL以外の値に達
4. パラメータのデータ型が一致しない場合、エラーが発生します。
postgres=# SELECT coalesce(1,now(),null);ERROR: COALESCE types integer and timestamp with time zone cannot be matched
最初のパラメータは整数で、now()関数はタイムゾーン付きのタイムスタンプを返 これらのパラメータは同じ型ではないため、関数のシグネチャは無効であるため、生成およびエラーが発生します。
5. 他の関数をCOALESCE関数内のパラメータとして使用できます。
postgres=# SELECT coalesce(nvl(null,199),least(8,null),avg(9.9)); coalesce ---------- 199(1 row)
COALESCEを使用したNULL値の防止
COALESCE関数の有用な適用は、クエリ結果にNULL値が表示されないようにすることです。
例
1. CREATE TABLEコマンドを使用してテーブル”sales”を作成します。
postgres=# CREATE TABLE sales (serial_id int primary key, product_name varchar(50), amount numeric, discount numeric); CREATE TABLE
2. テーブル”sales”にデータを挿入します。
postgres=# INSERT INTO sales VALUES (121,'paste',1000,10), (144,'brush',1500,20), (166,'soap',800,0), (178,'coffee',500,NULL);INSERT 0 4
3。 「金額」列の値から「割引」列の値を減算しようとすると、最後の行はNULL値を返します。 これは、NULL値に対して実行される算術演算がNULLになるためです。p>
postgres=# SELECT amount - discount as "final bill" FROM sales; final bill ------------ 990 1480 800 <=Null(4 rows)