IF(expr1,expr2,expr3)

IF(expr1,expr2,expr3)

expr1TRUE である場合は ( expr1 <> 0 および expr1 <> NULL ) 、IF()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 は整数を戻す 整数

expr2expr3 の両方がストリングで、どちらかのストリングが大文字小文字の区別をする場合、結果は大文字子目の区別があります。

注記 :IF もあり、それはここで説明されている IF() 関数 とは異なります。項17.2.10.1. 「IF ステートメント」 を参照してください。