IFNULL (SQL)
構文
IFNULL(expression-1,expression-2 [,expression-3])
{fn IFNULL(expression-1,expression-2)}
概要
InterSystems IRIS は IFNULL を SQL 汎用関数と ODBC スカラ関数の両方としてサポートしています。双方は大変よく似た処理を実行しますが、機能上は異なります。SQL 汎用関数は、3 つの引数をサポートします。ODBC スカラ関数は、2 つの引数をサポートします。2 つの引数の SQL 汎用関数と ODBC スカラ関数の機能は同じではありません。expression-1 が NULL でない場合に異なる値を返します。
SQL 汎用関数は、expression-1 が NULL かどうかを評価します。expression-1 を返すことはありません。
-
expression-1 が NULL の場合は、expression-2 を返します。
-
expression-1 が NULL でない場合は、expression-3 を返します。
-
expression-1 が NULL でなく、expression-3 が指定されていない場合は、NULL を返します。
ODBC スカラ関数は、expression-1 が NULL かどうかを評価します。これは expression-1 または expression-2 のいずれかを返します。
-
expression-1 が NULL の場合は、expression-2 を返します。
-
expression-1 が NULL でない場合は、expression-1 を返します。
NULL の処理方法の詳細は "NULL" を参照してください。
返り値のデータ型
-
IFNULL(expression-1,expression-2) : expression-2 のデータ型を返します。expression-2 が数値リテラル、文字列リテラル、または NULL である場合、データ型 VARCHAR を返します。
-
IFNULL(expression-1,expression-2,expression-3) : expression-2 と expression-3 が異なるデータ型を持つ場合、より高い (より包括的な) データ型の優先順位を持つデータ型を返します。expression-2 または expression-3 が数値リテラルまたは文字列リテラルである場合、データ型 VARCHAR を返します。expression-2 または expression-3 が NULL である場合、非 NULL 引数のデータ型を返します。
expression-2 と expression-3 が異なる長さ、精度、または小数桁を持つ場合、IFNULL は2 つの式のうち、より大きい長さ、精度、または小数桁を返します。
-
{fn IFNULL(expression-1,expression-2)} : expression-1 のデータ型を返します。expression-1 が数値リテラル、文字列リテラル、または NULL である場合、データ型 VARCHAR を返します。
DATE および TIME の表示変換
DATE や TIME データ型など、一部の expression-1 データ型では、論理モード (モード 0) から ODBC モード (モード 1) または表示モード (モード 2) への変換が必要です。expression-2 または expression-3 の値が同じデータ型でない場合は、この値を ODBC モードまたは表示モードに変換することはできません。DATE データ型の場合は SQLCODE エラー -146、TIME データ型の場合は SQLCODE エラー -147 が生成されます。例えば、IFNULL(DOB,'nodate',DOB) は、ODBC モードまたは表示モードでは実行できません。SQLCODE -146 エラーが発行され、%msg が "エラー : 'nodate' は無効な ODBC/JDBC 日付値です" または "エラー : 'nodate' は無効な表示日付値です" に設定されます。ODBC モードまたは表示モードでこの文を実行するには、値を適切なデータ型 IFNULL(DOB,CAST('nodate' as DATE),DOB) としてキャストする必要があります。これにより日付 0 になり、1840-12-31 として表示されます。
%List の表示変換
%List フィールドは、エンコーディングが設定された文字列データ型です。expression-1 が %List フィールドである場合、expression-2 または expression-3 の適切な値は、選択モードによって異なります。
-
論理モード (モード 0) または表示モード (モード 2) の場合、%List の値は、$lb("element1","element2",...) という形式の文字列データ型として返されます。したがって、以下の例に示すように、expression-2 または expression-3 の値は %List として指定する必要があります。
SELECT TOP 20 Name, IFNULL(FavoriteColors,$LISTBUILD('No Preference'),FavoriteColors) AS ColorChoice FROM Sample.Person
-
ODBC モード (モード 1) では、%List の値は、element1,element2,... というコンマ区切り要素の文字列として返されます。したがって、以下の例に示すように、expression-2 または expression-3 の値は文字列として指定できます。
SELECT TOP 20 Name, IFNULL(FavoriteColors'No Preference',FavoriteColors) AS ColorChoice FROM Sample.Person
引数
expression-1
NULL であるかどうか評価される式。
expression-2
expression-1 が NULL の場合に返される式。
expression-3
expression-1 が NULL でない場合に返される式 (オプション)。expression-3 が指定されないで expression-1 が NULL でない場合、NULL 値が返されます。
以下に、返されるデータ型について説明します。
NULL を処理する関数の比較
以下の表は、さまざまな SQL 比較関数を示します。論理比較テストが True (A は B と同じ) の場合、各関数は特定の値を返し、False (A は B と同じではない) の場合、別の値を返します。これらの関数により、NULL の論理比較を実行できます。実際の等値 (または非等値) 条件比較で NULL を指定することはできません。
SQL 関数 | 比較テスト | 返り値 |
---|---|---|
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 を返す |
ISNULL(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 を返す |
例
以下の例では、汎用関数と ODBC スカラ関数は、最初の式が NULL なので、どちらも 2 番目の式 (99) を返します。
SELECT IFNULL(NULL,99) AS NullGen,{fn IFNULL(NULL,99)} AS NullODBC
以下の例では、汎用関数と ODBC スカラ関数は、異なる値を返します。汎用関数は、最初の式が NULL ではないので、<null> を返します。ODBC の例は、最初の式が NULL ではないので、最初の式 (33) を返します。
SELECT IFNULL(33,99) AS NullGen,{fn IFNULL(33,99)} AS NullODBC
以下の例は、FavoriteColors が NULL の場合は文字列 'No Preference' を返し、そうでない場合は NULL を返します。
SELECT Name,
IFNULL(FavoriteColors,'No Preference') AS ColorChoice
FROM Sample.Person
以下の例は、FavoriteColors が NULL の場合は文字列 'No Preference' を返し、そうでない場合は FavoriteColors の値を返します。
SELECT Name,
IFNULL(FavoriteColors,'No Preference',FavoriteColors) AS ColorChoice
FROM Sample.Person
以下の例は、FavoriteColors が NULL の場合は文字列 'No Preference' を返し、そうでない場合は文字列 'Preference' を返します。
SELECT Name,
IFNULL(FavoriteColors,'No Preference','Preference') AS ColorPref
FROM Sample.Person
以下の ODBC 構文の例は、FavoriteColors が NULL の場合は文字列 'No Preference' を返し、そうでない場合は FavoriteColors データ値を返します。
SELECT Name,
{fn IFNULL(FavoriteColors,$LISTBUILD('No Preference'))} AS ColorPref
FROM Sample.Person
SELECT Name,
{fn IFNULL(FavoriteColors,'No Preference')} AS ColorChoice
FROM Sample.Person
以下の例では、WHERE 節で IFNULL を使用しています。これは、色の好みがない、21 歳未満の人を選択します。FavoriteColors が NULL の場合、IFNULL は Age フィールドの値を返し、その値が条件テストに使用されます。
SELECT Name,FavoriteColors,Age
FROM Sample.Person
WHERE 21 > IFNULL(FavoriteColors,Age)
ORDER BY Age
類似の機能については、NULL 述語 (IS NULL、IS NOT NULL) を参照してください。