Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ISNULL

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

Synopsis

ISNULL(check-expression,replace-expression)

引数

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

概要

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

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

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

replace-expression の可能なデータ型は、check-expression のデータ型と互換性がある必要があります。DISPLAY モードまたは ODBC モードで返されるデータ型は、check-expression のデータ型によって決まります。

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

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

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 の値を返します。

  ZNSPACE "SAMPLES"
  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 と比較します。

  ZNSPACE "SAMPLES"
  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