名前 | 説明 |
---|---|
CASE |
case 演算子 |
IF() |
If/else 構造構文 |
IFNULL() |
NULL if/else 構造構文 |
NULLIF() |
expr1 = expr2 の場合に NULL を返します |
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
式の構文は、ストアドルーチン内で使用する場合、で説明されている、
CASE
ステートメント項8.8.6.2. 「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
式の型になります。
デフォルトの
IF()
の戻り値は
(一時テーブルに保管されるときに重要な場合)、次のように計算されます.
式 | 戻り値 |
expr2 または
expr3 は文字列を返す |
文字列 |
expr2 または
expr3
は浮動小数点値を返す浮動小数点 |
浮動小数点 |
expr2 または
expr3 が整数を返す |
integer |
expr2
と
expr3
の両方が文字列で、どちらかの文字列が大文字小文字の区別をする場合、結果は大文字小文字の区別があります。
IF
ステートメントもあり、それはここで説明されている
IF()
関数とは異なります。項8.8.6.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) | NO | | | | +-------+--------------+------+-----+---------+-------+
この例では、test
カラムの型は CHAR(4)
です。
が true
の場合は expr1
=
expr2
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 度評価しますのでご注意ください。