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
なら、その result
値を返す。一致する結果が検出されない場合は、ELSE
後の result 値を返す。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
戻り値の型(INTEGER
、DOUBLE
、または
STRING
)は最初の戻り値(最初の
THEN
後の式)の型と同じ。
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
以外のカラムの型になる(この動作は MySQL
4.0.3 で新たに導入された)。
expr1
は整数値として評価される。したがって、浮動小数点型または文字列型の値をテストする場合は、比較演算を使用するようにする。
mysql>SELECT IF(0.1,1,0);
-> 0 mysql>SELECT IF(0.1<>0,1,0);
-> 1
上の最初の式では、IF(0.1)
が
0
を返す。これは、0.1
が整数型の値に変換されることによって、IF(0)
のテストが行われるためである。これでは期待した結果が得られない場合がある。2
番目の式では、元の浮動小数点値がゼロ以外の値かどうか比較によってテストされる。比較の結果は整数として使用される。
IF()
のデフォルトの戻り値型は、MySQL
バージョン 3.23
では次のように計算される(デフォルトの戻り値型はテンポラリテーブルへの格納時に重要になる場合がある)。
式 | 戻り値 |
expr2 または expr3 が文字列を返す。 | 文字列 |
expr2 または expr3 が浮動小数点値を返す。 | 浮動小数点 |
expr2 または expr3 が整数を返す。 | 整数 |
expr2 と expr3 が文字列の場合、両方の文字列がケース非依存のときは結果もケース非依存になる(バージョン 3.23.51 以降)。
IFNULL(expr1,expr2)
expr1
が NULL
でない場合は 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'
MySQL 4.0.6
以降では、IFNULL(expr1,expr2)
のデフォルトの結果値は、2 つの式のより
``一般的''
な方(STRING
、REAL
または INTEGER
の順)になる。それ以前の MySQL
バージョンとの違いは、式に基づくテーブルの作成時や、IFNULL()
から得られた値を MySQL
で内部的にテンポラリテーブルに格納する必要があるときに最も顕著である。
CREATE TABLE foo SELECT IFNULL(1,"test") as test;
MySQL 4.0.6 では、カラム 'テスト' の型は
CHAR(4)
だが、それ以前のバージョンでは、BIGINT
。
NULLIF(expr1,expr2)
expr1 = expr2
が TRUE の場合は
NULL
を返し、それ以外の場合は
expr1
を返す。 これは
CASE WHEN x = y THEN NULL ELSE x END
と同じ。
mysql>SELECT NULLIF(1,1);
-> NULL mysql>SELECT NULLIF(1,2);
-> 1
注意: MySQL
では、引数が等しくない場合、expr1
は 2 回評価される。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.