MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.2 制御フロー関数
« 11.1.4 論理演算子

11.3 文字列関数 »
Section Navigation      [Toggle]
  • 11 関数と演算子
  • 11.1 演算子
  • 11.2 制御フロー関数
  • 11.3 文字列関数
  • 11.4 数字関数
  • 11.5 日付時刻関数
  • 11.6 MySQL が使用するカレンダーは ?
  • 11.7 全文検索関数
  • 11.8 キャスト関数と演算子
  • 11.9 XML 関数
  • 11.10 その他の関数
  • 11.11 GROUP BY 句との関数および修飾子の使用

11.2. 制御フロー関数

  • CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

    CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

    最初の例は、value=compare_value に result を戻します。2番目は true である最初の条件に結果を戻します。一致する結果値がない場合は、ELSE のあとの結果が戻され、ELSE パートがない場合は、NULL が戻されます。

    mysql> SELECT CASE 1 WHEN 1 THEN 'one'
        ->     WHEN 2 THEN 'two' ELSE 'more' END;
            -> 'one'
    mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
            -> 'true'
    mysql> SELECT CASE BINARY 'B'
        ->     WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
            -> NULL
    

    CASE 式のデフォルトの戻り値タイプは、すべての戻り値の適合集合体タイプですが、使用される文脈にもよります。ストリング文脈で使用される場合は、結果はストリングとして戻されます。数値文脈で使用される場合は、結果は 10 進値、実数値、または整数値として戻されます。

    注記 :ここで示されている CASE 式 の構文は、ストアド ルーチン内で使用する場合、項17.2.10.2. 「CASEステートメント」 で説明されている、CASE 文 とはやや異なります。CASE 文は ELSE NULL 句を持つことができず、END でなく、END CASE で終了します。

  • IF(expr1,expr2,expr3)

    expr1 が TRUE である場合は ( expr1 <> 0 および expr1 <> NULL ) 、IF() は expr2 を戻します。それ以外では、expr3 を戻します。IF() は、使用されている文脈によって、数値値もしくはストリング値を戻します。

    mysql> SELECT IF(1>2,2,3);
            -> 3
    mysql> SELECT IF(1<2,'yes','no');
            -> 'yes'
    mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
            -> 'no'
    

    expr2 または expr3 のうちのひとつが、明示的に NULL である場合は、IF() 関数の結果タイプは、非 NULL 式のタイプになります。

    expr1 は整数値として評価されます。つまり、浮動小数点値、またはストリング値をテストしている場合は、比較演算を使用して行うべきということになります。

    mysql> SELECT IF(0.1,1,0);
            -> 0
    mysql> SELECT IF(0.1<>0,1,0);
            -> 1
    

    ここの最初の例では、IF(0.1) は、IF(0) のテストの結果として 0.1 が整数値に変換されるため、0 を戻します。これは不測の結果であるかもしれません。2 番目の例では、比較テストは、オリジナルの浮動小数点値がゼロ以外であるかテストします。比較の結果は整数として使用されます。

    デフォルトの IF() の戻り値タイプは ( 一時テーブルに保管される時に重要な場合あり ) 、次のように計算されます :

    式 戻り値
    expr2 または expr3 はストリングを戻す ストリング
    expr2 または expr3 は浮動小数点値を戻す 浮動小数点
    expr2 または expr3 は整数を戻す 整数

    expr2 と expr3 の両方がストリングで、どちらかのストリングが大文字小文字の区別をする場合、結果は大文字子目の区別があります。

    注記 :IF 文 もあり、それはここで説明されている IF() 関数 とは異なります。項17.2.10.1. 「IF ステートメント」 を参照してください。

  • IFNULL(expr1,expr2)

    expr1 が NULL でない場合、IFNULL() は expr1 を戻し、それ以外では expr2 を戻します。IFNULL() は、使用されている文脈によって、数値値もしくはストリング値を戻します。

    mysql> SELECT IFNULL(1,0);
            -> 1
    mysql> SELECT IFNULL(NULL,10);
            -> 10
    mysql> SELECT IFNULL(1/0,10);
            -> 10
    mysql> SELECT IFNULL(1/0,'yes');
            -> 'yes'
    

    IFNULL(expr1,expr2) のデフォルトの結果値は、STRING 、REAL 、または INTEGER の順に、ふたつの式のより 「一般的」 なものです。式や MySQL が一時テーブルの IFNULL() によって戻された値を内部に蓄積しなければいけない場所に基づくテーブルの大文字小文字を考慮してください :

    mysql> CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
    mysql> DESCRIBE tmp;
    +-------+--------------+------+-----+---------+-------+
    | Field | Type         | Null | Key | Default | Extra |
    +-------+--------------+------+-----+---------+-------+
    | test  | varbinary(4) |      |     |         |       |
    +-------+--------------+------+-----+---------+-------+
    

    この例では、test カラムのタイプは VARBINARY(4) です。

  • NULLIF(expr1,expr2)

    expr1 = expr2 が true の場合は NULL を返し、それ以外は expr1 を返します。これは、CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END と同様です。

    mysql> SELECT NULLIF(1,1);
            -> NULL
    mysql> SELECT NULLIF(1,2);
            -> 1
    

    MySQL は、引数が等しくない場合、expr1 を 2 度評価しますのでご注意ください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates