-
CASE
value
WHEN [compare_value
] THENresult
[WHEN [compare_value
] THENresult
...] [ELSEresult
] ENDCASE WHEN [
condition
] THENresult
[WHEN [condition
] THENresult
...] [ELSEresult
] END1 番目のバージョンでは、
の場合に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
式の構文は、ストアドプログラム内部で使用するために、セクション13.6.5.1「CASE 構文」で説明した SQLCASE
ステートメントの構文とはわずかに異なります。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
は整数を返す整数 expr2
とexpr3
の両方が文字列で、どちらかの文字列で大文字と小文字が区別される場合は、結果でも大文字と小文字が区別されます。注記IF
ステートメントもありますが、ここで説明されているIF()
関数とは異なります。セクション13.6.5.2「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
の順に、2 つの式のよりも「一般的」です。式や 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
カラムの型はVARBINARY(4)
です。 -
が true の場合はexpr1
=expr2
NULL
を返し、それ以外の場合はexpr1
を返します。これは、CASE WHEN
と同じです。expr1
=expr2
THEN NULL ELSEexpr1
ENDmysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1
注記引数が等しくない場合は、MySQL で
expr1
が 2 回評価されます。