expr1
が TRUE
である場合は ( 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 は整数を戻す |
整数 |
expr2
と expr3
の両方がストリングで、どちらかのストリングが大文字小文字の区別をする場合、結果は大文字子目の区別があります。
注記 :IF
文 もあり、それはここで説明されている IF()
関数 とは異なります。項17.2.10.1. 「IF
ステートメント」 を参照してください。