Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

ISNULL (SQL)

NULL テストを行い、適切な式を返す関数です。

Synopsis

ISNULL(check-expression,replace-expression)

引数

引数 説明
check-expression 評価される式。
replace-expression check-expression が NULL の場合に返される式。

ISNULL が返す値のデータ型は、check-expressionデータ型と同じです。

概要

ISNULLcheck-expression を評価し、2 つの値のうち 1 つを返します。

  • check-expression が NULL の場合は、replace-expression を返します。

  • check-expression が NULL でない場合は、check-expression を返します。

replace-expression のデータ型は、check-expression のデータ型と互換性がある必要があります。

ISNULL 関数は NVL 関数と同じであり、Oracle との互換性のために提供されているという点に注意してください。

NULL の処理方法の詳細は、"InterSystems SQL の使用法" の “言語要素” の章にある "NULL" のセクションを参照してください。

DATE および TIME の表示変換

check-expression のデータ型によっては、論理モードから ODBC モードまたは表示モードへの変換が必要になります。例えば、DATE データ型と TIME データ型です。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

以下の動的 SQL の例は、FavoriteColors が NULL の場合は文字列 'No Preference' を返し、そうでない場合は FavoriteColors の値を返します。

  SET myquery=3
    SET myquery(1)="SELECT Name,"
    SET myquery(2)="ISNULL(FavoriteColors,'No Preference') AS ColorChoice "
    SET myquery(3)="FROM Sample.Person"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()
  WRITE !,"End of data"

ISNULL の動作を IFNULL と比較します。

  SET myquery=3
    SET myquery(1)="SELECT Name,"
    SET myquery(2)="IFNULL(FavoriteColors,'No Preference') AS ColorChoice "
    SET myquery(3)="FROM Sample.Person"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  DO rset.%Display()
  WRITE !,"End of data"

関連項目

FeedbackOpens in a new tab