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 ステートメント」 を参照してください。