機能
条件付けられた値を指定します。
記述形式
参照項番
一般規則
NULLIFは、第1オペランドと第2オペランドが等しい場合にNULL値、そうでない場合に第1オペランドの値を返却します。
NULLIF(V1,V2)は、以下のCASE指定と同じです。
CASE WHEN V1=V2 THEN NULL ELSE V1 END
NULLIFの値式の両方に動的パラメタ指定を指定することはできません。
NULLIFの1番目または2番目の値式に動的パラメタ指定が指定された場合、DESCRIBE情報はもう一方の値式のデータ型となります。
値式として順序を指定することはできません。
COALESCEは、指定したオペランドの値式のうちで最初に出現したNULL値でない値を返却します。すべての値式がNULL値の場合は、最後のオペランドの値を返却します。
COALESCE (V1,V2)は、以下のCASE指定と同じです。
CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
COALESCE(V1,V2・・・,Vn)は、以下のCASE指定と同じです。
CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE(V2,・・・,Vn) END
COALESCEの値式すべてに動的パラメタ指定を指定することはできません。
COALESCEの値式に動的パラメタ指定が指定された場合、DESCRIBE情報は他のすべての値式に対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。
値式として順序を指定することはできません。
各WHENオペランドの値式のデータ型は、CASEオペランドの値式のデータ型と比較可能でなければなりません。比較可能なデータ型に関する規則は、“2.12.1 比較述語”を参照してください。
単純CASE指定は、各探索WHEN句を“CASEオペランド=WHENオペランド”の形式で指定した探索CASEと同じです。
CASE V1 WHEN V2 THEN V3 WHEN V4 THEN V5 ELSE V6 END ↓同じ CASE WHEN V1=V2 THEN V3 WHEN V1=V4 THEN V5 ELSE V6 END
CASEオペランド、WHENオペランドおよび探索条件に順序を指定することはできません。
CASE指定の結果のデータ型は、すべての結果に対して集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。
CASE指定の結果式すべてに動的パラメタ指定を指定することはできません。
単純CASEのCASEオペランド、複数のWHENオペランドすべてに動的パラメタ指定を指定することはできません。
動的パラメタ指定が指定された場合のDESCRIBE情報は、以下のとおりです。
CASE指定の結果式に動的パラメタ指定が指定された場合、DESCRIBE情報は他の結果式に指定された値式に対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。
単純CASEのWHENオペランドに動的パラメタ指定が指定された場合、DESCRIBE情報はCASEオペランドと他のすべてのWHENオペランドに対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。
単純CASEのCASEオペランドに動的パラメタ指定が指定された場合、DESCRIBE情報はすべてのWHENオペランドに対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。
使用例
CASE略式、NULLIF指定の場合
利用者表から、名前の愛称を求めます。ただし、愛称は名前とは異なる内容の設定がある場合のみ取り出します。
SELECT 名前,NULLIF(愛称,名前) AS 愛称 FROM 利用者表
CASE略式、COALESCE指定の場合
利用者表から、メールアドレス、TEL番号、住所の優先順で最初のNULL値以外のデータを求めます。
SELECT 利用者, COALESCE(メール,TEL,住所) AS 連絡先 FROM 利用者表
CASE指定、単純CASE指定の場合
履歴表から、利用者ごとに利用したサービスの回数をサービス別に求めます。
SELECT 利用者,COUNT(CASE サービス WHEN 1 THEN サービス ELSE NULL END) AS サービス1 ,COUNT(CASE サービス WHEN 2 THEN サービス ELSE NULL END) AS サービス2 ,COUNT(CASE サービス WHEN 3 THEN サービス ELSE NULL END) AS サービス3 FROM 履歴表 GROUP BY 利用者
CASE指定、探索CASE指定の場合
履歴表から、利用者ごとに利用したサービスの回数をサービス別に求めます。
SELECT 利用者,COUNT(CASE WHEN サービス = 1 THEN サービス ELSE NULL END) AS サービス1 ,COUNT(CASE WHEN サービス = 2 THEN サービス ELSE NULL END) AS サービス2 ,COUNT(CASE WHEN サービス = 3 THEN サービス ELSE NULL END) AS サービス3 FROM 履歴表 GROUP BY 利用者