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
  CASE
  WHEN 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