ISNULL (SQL)
構文
ISNULL(check-expression,replace-expression)
引数
引数 | 説明 |
---|---|
check-expression | 評価される式。 |
replace-expression | check-expression が NULL の場合に返される式。 |
ISNULL が返す値のデータ型は、check-expression のデータ型と同じです。
概要
ISNULL は check-expression を評価し、2 つの値のうち 1 つを返します。
-
check-expression が NULL の場合は、replace-expression を返します。
-
check-expression が NULL でない場合は、check-expression を返します。
replace-expression のデータ型は、check-expression のデータ型と互換性がある必要があります。
ISNULL 関数は NVL 関数と同じであり、Oracle との互換性のために提供されているという点に注意してください。
NULL の処理方法の詳細は "NULL" を参照してください。
DATE および TIME の表示変換
check-expression のデータ型によっては (DATE、TIME データ型など)、論理モードから ODBC モードまたは表示モードへの変換が必要になります。replace-expression の値が同じデータ型でない場合は、この値を ODBC モードまたは表示モードに変換することはできません。DATE データ型の場合は SQLCODE エラー -146、TIME データ型の場合は SQLCODE エラー -147 が生成されます。例えば、ISNULL(DOB,'nodate') は、ODBC モードまたは表示モードでは実行できません。SQLCODE -146 エラーが発行され、%msg が "エラー : 'nodate' は無効な ODBC/JDBC 日付値です" または "エラー : 'nodate' は無効な表示日付値です" に設定されます。ODBC モードまたは表示モードでこの文を実行するには、値を適切なデータ型 ISNULL(DOB,CAST('nodate' as DATE)) としてキャストする必要があります。これにより日付 0 になり、1840-12-31 として表示されます。
NULL を処理する関数の比較
以下の表は、さまざまな SQL 比較関数を示します。論理比較テストが True (A は B と同じ) の場合、各関数は特定の値を返し、False (A は B と同じではない) の場合、別の値を返します。これらの関数により、NULL の論理比較を実行できます。実際の等値 (または非等値) 条件比較で NULL を指定することはできません。
SQL 関数 | 比較テスト | 返り値 |
---|---|---|
ISNULL(ex1,ex2) | ex1 = NULL |
True の場合、ex2 を返す False の場合、ex1 を返す |
IFNULL(ex1,ex2) [引数が 2 つの形式] | ex1 = NULL |
True の場合、ex2 を返す False の場合、NULL を返す |
IFNULL(ex1,ex2,ex3) [引数が 3 つの形式] | ex1 = NULL |
True の場合、ex2 を返す False の場合、ex3 を返す |
{fn IFNULL(ex1,ex2)} | ex1 = NULL |
True の場合、ex2 を返す False の場合、ex1 を返す |
NVL(ex1,ex2) | ex1 = NULL |
True の場合、ex2 を返す False の場合、ex1 を返す |
NULLIF(ex1,ex2) | ex1 = ex2 |
True の場合、NULL を返す False の場合、ex1 を返す |
COALESCE(ex1,ex2,...) | 各引数で ex = NULL |
True の場合、次の ex 引数をテストすべての ex 引数が True (NULL) の場合、NULL を返す False の場合、ex を返す |
例
以下の例では、最初の ISNULL は、最初の式が NULL なので、2 番目の式 (99) を返します。2 番目の ISNULL の例は、最初の式が NULL ではないので、最初の式 (33) を返します。
SELECT ISNULL(NULL,99) AS IsNullT,ISNULL(33,99) AS IsNullF
以下の例は、FavoriteColors が NULL の場合は文字列 'No Preference' を返し、そうでない場合は FavoriteColors の値を返します。
SELECT Name,
ISNULL(FavoriteColors,'No Preference') AS ColorChoice
FROM Sample.Person
ISNULL の動作を IFNULL と比較します。
SELECT Name,
IFNULL(FavoriteColors,'No Preference') AS ColorChoice
FROM Sample.Person