Если expr1 равно значению ИСТИНА (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'
expr1 вычисляется как целое число; это означает, что при исследовании
чисел с плавающей точкой или строковых величин в этой функции необходимо
использовать операцию сравнения:
mysql> SELECT IF(0.1,1,0);
-> 0
mysql> SELECT IF(0.1<>0,1,0);
-> 1
В первом случае из приведенных выше функция IF(0.1) возвращает 0, так как
0.1 преобразуется в целое число и в результате выполняется функция IF(0).
Но это вовсе не то, что должно было бы получиться. Во втором случае
исходная величина с плавающей точкой исследуется при помощи оператора
сравнения, чтобы определить, является ли она ненулевой, и в качестве
аргумента функции используется результат сравнения - целое число. В версии
MySQL 3.23 возвращаемый по умолчанию тип функции IF() (это может иметь
значение при сохранении его во временной таблице) вычисляется, как
показано ниже:
Выражение | Возвращаемая величина
|
expr2 или expr3 возвращает строку | строка
|
expr2 or expr3 возвращает величину с плавающей точкой | с плавающей точкой
|
expr2 or expr3 возвращает целое число | целое число
|
Если expr2 и expr3 являются строками, и обе зависимы от регистра символов,
то результат является чувствительным к регистру (начиная с 3.23.51).