CASE
SQL スクリプトの CASE ステートメントは、条件のリストを評価し、複数の可能な結果式の 1 つを返します。CASE ステートメントには 2 つの有効な形式があります。
構文 1
<valueExpression> 構文を使用して、式を 1 回評価してから、一致する値を見つけます。WHEN 句は順番に評価され、最初の一致が使用されます。
CASE <valueExpression>
WHEN <valueExpression> THEN <statements>
[…]
[ELSE <statements>]
END AS <new_column_name>
構文 2
<conditionalExpression> 構文を使用して、IF/THEN/ELSEIF/ELSE のような一連のテストを評価します。WHEN 句は順番に評価され、最初の一致が使用されます。
CASE
WHEN <conditionalExpression> THEN <statements>
[…]
[ELSE <statements>]
END AS <new_column_name>
備考
<statements> で示される領域には、0 個以上のステートメントが存在する可能性があります。
例
PROCEDURE get_month_name (OUT month_name VARCHAR)
BEGIN
CASE MONTH (CURRENT_DATE () ) WHEN 1 THEN
SET month_name = 'JAN';
WHEN 2 THEN
SET month_name = 'FEB';
WHEN 3 THEN
SET month_name = 'MAR';
...
WHEN 11 THEN
SET month_name = 'NOV';
WHEN 12 THEN
SET month_name = 'DEC';
END CASE;END
PROCEDURE get_duration (IN seconds INTEGER, OUT result VARCHAR)
BEGIN
CASEWHEN seconds < 60 THEN
SET result = CAST (
CONCAT (seconds, ' seconds') AS VARCHAR) ;
WHEN seconds < 60*60 THEN
SET result = CAST (
CONCAT (seconds/60, ' minutes') AS VARCHAR) ;
ELSE
SET result = CAST (
CONCAT (seconds/3600, ' hours') AS VARCHAR) ;
END CASE;END