概要
ISNULL は check-expression を評価し、2 つの値のうち 1 つを返します。
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 として表示されます。
例
以下の例では、最初の 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"