CASE は、単純形式と検索形式という 2 つの形式を持つ複合関数です。どちらの形式の CASE も値を戻します。その値は、後続の処理のパスを制御する結果です。
いずれの形式の CASE でも、値は、WHEN 文節の中で定義される規則のセットに従って戻されます。
単純形式の場合、source_value に一致するものが見つかるまで、各 test_value との比較がなされます。CASE 関数の結果は、対応する result_value の値です。したがって、source_value のデータ・タイプは、各 test_value のデータ・タイプと比較可能なものでなければなりません。
CASE 関数には、少なくとも 1 つの WHEN が必要です。ELSE はオプションです。デフォルトの ELSE 式は NULL です。CASE 式は END で区切ります。テスト値は、リテラル値でなくてもかまいません。
検索 WHEN 文節バージョンも同様ですが、異なる複数の値をテストすることができる点で柔軟性の高い形式です。
DECLARE CurrentMonth CHAR; DECLARE MonthText CHAR; SET CurrentMonth = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 6 FOR 2); SET MonthText = CASE CurrentMonth WHEN '01' THEN 'January' WHEN '02' THEN 'February' WHEN '03' THEN 'March' WHEN '04' THEN 'April' WHEN '05' THEN 'May' WHEN '06' THEN 'June' ELSE 'Second half of year' END
DECLARE CurrentMonth CHAR; DECLARE MonthText CHAR; SET CurrentMonth = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 6 FOR 2); SET MonthText = CASE WHEN Month = '01' THEN 'January' WHEN Month = '02' THEN 'February' WHEN Month = '03' THEN 'March' WHEN Month = '04' THEN 'April' WHEN Month = '05' THEN 'May' WHEN Month = '06' THEN 'June' ELSE 'Second half of year' END
DECLARE CurrentMonth CHAR; DECLARE CurrentYear CHAR; DECLARE MonthText CHAR; SET CurrentMonth = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 6 FOR 2); SET CurrentYear = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 1 FOR 4); SET MonthText = CASE WHEN CurrentMonth = '01' THEN 'January' WHEN CurrentMonth = '02' THEN 'February' WHEN CurrentMonth = '03' THEN 'March' WHEN CurrentYear = '2000' THEN 'A month in the Year 2000' WHEN CurrentYear = '2001' THEN 'A month in the Year 2001' ELSE 'Not first three months of any year or a month in the Year 2000 or 2001' END;