CASE は、単純形式と検索形式という 2 つの形式を持つ複合関数です。 どちらの形式の CASE も結果を戻します。その結果は、後続の処理のパスを制御する値です。
>>-CASE--+-| simple-when-clause |---+---------------------------> '-| searched-when-clause |-' .-ELSE NULL---------------. >--+-------------------------+--END---------------------------->< '-ELSE -result_expression-' simple-when-clause .------------------------------------------. V | |--source_value----WHEN -test_value--THEN--+-result_value-+-+---| '-NULL---------' searched-when-clause .------------------------------------------------. V | |----WHEN -search_condition--THEN--+-result_value-+-+-----------| '-NULL---------'
単純形式の場合、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;