ホームページ >データベース >mysql チュートリアル >mysql制御処理関数
構文:
CASE 値 WHEN [比較値] THEN 結果 [WHEN [比較値] THEN 結果 ...] [ELSE 結果] END CASE WHEN [条件] THEN 結果 [WHEN [条件] THEN 結果 ... ] [ELSE 結果] END
最初の解の戻り結果では、値=比較値になります。 2 番目のシナリオの戻り結果は、最初のシナリオの真の結果です。一致する結果値がない場合、戻り値は ELSE 以降の結果になります。ELSE 部分がない場合、戻り値は NULL になります。
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
-> WHEN 2 THEN 'two' ELSE 'more' END;
-> SELECT CASE WHEN 1>0 true' ELSE 'false' END;
-> 'true'
> SELECT CASE BINARY 'B'
-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
-> NULL
CASE 式のデフォルトの戻り値の型は、互換性のある戻り値のコレクション型ですが、具体的な状況はコンテキストによって異なります。文字列コンテキストで使用された場合は、結果の文字列を返します。数値コンテキストで使用した場合、結果は 10 進数、実数、または整数値として返されます。
IF(expr1,expr2,expr3)
expr1 が TRUE (expr1 <> 0 および expr1 <> NULL) の場合、IF() の戻り値は expr2 になり、それ以外の場合、戻り値は expr3 になります。 IF() の戻り値は、コンテキストに応じて数値または文字列値のいずれかになります。
mysql>SELECT IF(1>2,2,3);
->SELECT IF(1
->
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'
expr2 または expr3 の 1 つだけが明らかに NULL の場合、IF () 関数の結果の型は、NULL 以外の式の結果の型です。
expr1 は整数値として評価されます。つまり、浮動小数点値または文字列値を検証する場合は、比較演算を使用してチェックする必要があります。
mysql> SELECT IF(0.1,1,0);
-> SELECT IF(0.1<>0,1,0);
->最初の例では、0.1 が整数値に変換され、IF(0) のテストが行われるため、IF(0.1) は 0 を返します。これはあなたが望む状況ではないかもしれません。 2 番目の例では、比較により元の浮動小数点値がゼロ以外であるかどうかがチェックされます。比較結果には整数を使用します。
IF() のデフォルトの戻り値の型 (これは一時テーブルに格納される場合に重要です) は次のように計算されます:
式の戻り値
expr2 または expr3 戻り値は文字列です。 文字列
expr2 または expr3 戻り値は浮動小数点値です。 浮動小数点
expr2 または expr3 は整数を返します。 整数
expr2 と expr3 が両方とも文字列で、いずれかの文字列が大文字と小文字を区別する場合、返される結果は大文字と小文字が区別されます。
IFNULL(expr1,expr2)
expr1 が NULL でない場合、IFNULL() の戻り値は expr1 になります。それ以外の場合、戻り値は expr2 になります。 IFNULL() の戻り値は、使用されるコンテキストに応じて数値または文字列のいずれかになります。
mysql> SELECT IFNULL(1,0);
mysql> ;
-> SELECT IFNULL(1/0,'yes');
-> 'yes'IFNULL(expr1,expr2) のデフォルトの結果値は、STRING、REAL、または INTEGER の順で、2 つの式のうち「yes」が多い方、「一般的な」式です。式ベースのテーブルの場合、または MySQL が IFNULL() の戻り値をメモリ内の一時テーブルに保存する必要があるとします。 CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;この例では、テスト列の型は CHAR(4) です。 NULLIF(expr1,expr2) expr1 = expr2 が true の場合、戻り値は NULL になり、それ以外の場合、戻り値は expr1 になります。これは CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END と同じです。 mysql>SELECT NULLIF(1,1);->NULLmysql>結果の値は expr1 です。