カテゴリ:

条件式関数

IFNULL

expr1 が NULL の場合は、 expr2 を返します。それ以外の場合は expr1 を返します。

エイリアス:

NVL

構文

IFNULL( <expr1> , <expr2> )
Copy

引数

expr1

一般的な式です。

expr2

一般的な式です。

使用上の注意

  • Snowflake performs implicit conversion of arguments to make them compatible. For example, if one of the input expressions is a numeric type, the return type is also a numeric type. That is, SELECT IFNULL('17', 1); first converts the VARCHAR value '17' to the NUMBER value 17, and then returns the first non-NULL value.

    When conversion isn't possible, implicit conversion fails. For example, SELECT IFNULL('foo', 1); returns an error because the VARCHAR value 'foo' can't be converted to a NUMBER value.

    We recommend passing in arguments of the same type or explicitly converting arguments if needed.

  • When implicit conversion converts a non-numeric value to a numeric value, the result is a value of type NUMBER(18,5).

    定数ではない数値文字列引数で、 NUMBER(18,5)が数値を表すのに十分でない場合は、値を表すことができる型に引数を キャスト します。

  • どちらの式にも UNIONINTERSECTEXCEPTMINUS などの集合演算子を含む SELECT ステートメントを含めることができます。セット演算子を使用する場合は、データ型に互換性があることを確認してください。詳細については、 演算子のセット トピックの 一般的な使用上の注意 をご参照ください。

照合順序の詳細

戻り値

戻り式のデータ型を返します。

両方の式が NULL の場合は、 NULL を返します。

サプライヤーの連絡先情報を含むテーブルを作成します。

CREATE TABLE IF NOT EXISTS suppliers (
  supplier_id INT PRIMARY KEY,
  supplier_name VARCHAR(30),
  phone_region_1 VARCHAR(15),
  phone_region_2 VARCHAR(15));
Copy

このテーブルには、2つの異なるリージョンの各サプライヤーの電話番号が含まれています。電話番号は、リージョンで NULL にすることもできます。

テーブルに値を挿入します。

INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
  VALUES(1, 'Company_ABC', NULL, '555-01111'),
        (2, 'Company_DEF', '555-01222', NULL),
        (3, 'Company_HIJ', '555-01333', '555-01444'),
        (4, 'Company_KLM', NULL, NULL);
Copy

次の SELECT ステートメントは、 IFNULL 関数を使用して phone_region_1phone_region_2 の値を取得します。

この例では、 IFNULL 関数で以下の結果を示しています。

  • IF_REGION_1_NULL 列には、 phone_region_1 の値、またはその値が NULL の場合は phone_region_2 の値が格納されます。

  • IF_REGION_2_NULL 列には、 phone_region_2 の値、またはその値が NULL の場合は phone_region_1 の値が格納されます。

  • phone_region_1phone_region_2 の両方が NULL の場合、この関数は NULL を返します。

SELECT supplier_id,
       supplier_name,
       phone_region_1,
       phone_region_2,
       IFNULL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
       IFNULL(phone_region_2, phone_region_1) IF_REGION_2_NULL
  FROM suppliers
  ORDER BY supplier_id;
Copy
+-------------+---------------+----------------+----------------+------------------+------------------+
| SUPPLIER_ID | SUPPLIER_NAME | PHONE_REGION_1 | PHONE_REGION_2 | IF_REGION_1_NULL | IF_REGION_2_NULL |
|-------------+---------------+----------------+----------------+------------------+------------------|
|           1 | Company_ABC   | NULL           | 555-01111      | 555-01111        | 555-01111        |
|           2 | Company_DEF   | 555-01222      | NULL           | 555-01222        | 555-01222        |
|           3 | Company_HIJ   | 555-01333      | 555-01444      | 555-01333        | 555-01444        |
|           4 | Company_KLM   | NULL           | NULL           | NULL             | NULL             |
+-------------+---------------+----------------+----------------+------------------+------------------+