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_valueresult
を戻します。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 で終了します。
expr1 が TRUE
である場合は ( および
expr1
<> 0 ) 、expr1 <>
NULLIF() は
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 ステートメント」
を参照してください。
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
カラムのタイプは CHAR(4) です。
が true
の場合は expr1 =
expr2NULL
を返し、それ以外は 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 度評価しますのでご注意ください。
