Если expr1 не равно NULL, то функция IFNULL() возвращает значение expr1, в
противном случае - expr2. В зависимости от контекста функция IFNULL() может
возвращать либо числовое, либо строковое значение:
Отметим, что если аргументы равны, то величина expr1 вычисляется в MySQL
дважды.
IF(expr1,expr2,expr3)
Если expr1 равно значению ИСТИНА (expr1 <> 0 и expr1 <> NULL), то функция
IF() возвращает expr2, в противном случае - expr3. В зависимости от
контекста функция IF() может возвращать либо числовое, либо строковое
значение:
expr1 вычисляется как целое число; это означает, что при исследовании
чисел с плавающей точкой или строковых величин в этой функции необходимо
использовать операцию сравнения:
В первом случае из приведенных выше функция 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).
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
В первом варианте возвращается значение result, если value=compare-value.
Во втором - результат для первого указанного условия condition, если оно
истинно. Если соответствующая величина результата не определена, то
возвращается значение result, указанное после оператора ELSE. Если часть
ELSE в выражении отсутствует, возвращается 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
Тип возвращаемой величины будет такой же (INTEGER, DOUBLE или STRING),
как и у первой возвращаемой величины (выражение после первого оператора
THEN).