このページは機械翻訳したものです。
- 
CASEvalueWHENcompare_valueTHENresult[WHENcompare_valueTHENresult...] [ELSEresult] ENDCASE WHENconditionTHENresult[WHENconditionTHENresult...] [ELSEresult] END最初の CASE構文では、true である最初のvalue=compare_valueresultが返されます。 2 番目の構文は、true である最初の条件の結果を返します。 比較または条件が true の場合、ELSEが返された後の結果、またはELSE部分がない場合はNULLが返されます。注記ここで説明する CASEoperator の構文は、セクション13.6.5.1「CASE ステートメント」 で説明する SQLCASEstatement の構文とは若干異なり、ストアドプログラム内で使用されます。CASEステートメントはELSE NULL句を持つことができず、ENDでなく、END CASEで終了します。CASE式の結果の戻り型は、すべての結果値の集計型です:- 
すべてのタイプが数値の場合、集計タイプも数値になります: - 少なくとも 1 つの引数が倍精度の場合、結果は倍精度になります。 
- それ以外の場合、少なくとも 1 つの引数が - DECIMALであれば、結果は- DECIMALになります。
- 
それ以外の場合、結果は整数型になります (ただし、次の例外があります): - すべての整数型がすべて符号付きまたは符号なしの場合、結果は同じ符号になり、精度は指定されたすべての整数型 ( - TINYINT,- SMALLINT,- MEDIUMINT,- INTまたは- BIGINT) の中で最も高くなります。
- 符号付き整数型と符号なし整数型の組合せがある場合、結果は符号付きになり、精度が高くなる可能性があります。 たとえば、型が署名付き - INTおよび署名なし- INTの場合、結果は署名付き- BIGINTになります。
- 例外は、符号なし - BIGINTと符号付き整数型を組み合せたものです。 その結果、精度とスケール 0 が十分な- DECIMALになります。
 
 
- すべてのタイプが - BITの場合、結果は- BITになります。 それ以外の場合、- BIT引数は- BIGINTと同様に扱われます。
- すべてのタイプが - YEARの場合、結果は- YEARになります。 それ以外の場合、- YEAR引数は- INTと同様に扱われます。
- すべての型が文字列 ( - CHARまたは- VARCHAR) の場合、結果は、オペランドの最長文字長によって決定される最大長の- VARCHARになります。
- すべての型が文字列またはバイナリ文字列の場合、結果は - VARBINARYになります。
- SETおよび- ENUMは- VARCHARと同様に処理され、結果は- VARCHARになります。
- すべてのタイプが - JSONの場合、結果は- JSONになります。
- 
すべての型が時間的な場合、結果は時間的になります: - すべての時間型が - DATE、- TIMEまたは- TIMESTAMPの場合、結果はそれぞれ- DATE、- TIMEまたは- TIMESTAMPになります。
- それ以外の場合、時間型が混在すると、結果は - DATETIMEになります。
 
- すべてのタイプが - GEOMETRYの場合、結果は- GEOMETRYになります。
- いずれかのタイプが - BLOBの場合、結果は- BLOBになります。
- 他のすべてのタイプの組合せの場合、結果は - VARCHARです。
- リテラル - 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
- 
- 
IF(expr1,expr2,expr3)expr1がTRUE(expr1<> 0expr1<> NULLIF()はexpr2を返します。 それ以外の場合は、expr3を返します。注記IFステートメントもありますが、ここで説明されているIF()関数とは異なります。 セクション13.6.5.2「IF ステートメント」を参照してください。expr2とexpr3の一方のみが明示的にNULLである場合は、IF()関数の結果型は非NULL式の型になります。IF()のデフォルトの戻り型 (一時テーブルに格納されている場合でもかまいません) は、次のように計算されます:- 
expr2またはexpr3が文字列を生成する場合、結果は文字列になります。expr2とexpr3の両方が文字列の場合、いずれかの文字列で大文字と小文字が区別されると、結果では大文字と小文字が区別されます。
- expr2または- expr3が浮動小数点値を生成する場合、結果は浮動小数点値になります。
- expr2または- expr3が整数を生成する場合、結果は整数になります。
 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'
- 
- 
IFNULL(expr1,expr2)expr1がNULLでない場合、IFNULL()はexpr1を返し、それ以外の場合はexpr2を返します。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)(文字列型) です。
- 
NULLIF(expr1,expr2)expr1=expr2NULLを返し、それ以外の場合はexpr1を返します。 これは、CASE WHENと同じです。expr1=expr2THEN NULL ELSEexpr1END戻り値の型は最初の引数と同じです。 mysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1注記引数が等しくない場合は、MySQL で expr1が 2 回評価されます。