MySQL.RU .:. Одобрено лучшими российскими программистами
Справочное руководство по MySQL6.3.1.4 Функции потока управления программой
6.3.1.4 Функции потока управления программой
IFNULL(expr1,expr2)
-
Если
expr1 не равно NULL , то функция IFNULL() возвращает значение expr1 , в
противном случае - expr2 . В зависимости от контекста функция IFNULL() может
возвращать либо числовое, либо строковое значение:
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'
NULLIF(expr1,expr2)
-
Если выражение
expr1 = expr2 истинно, то возвращает NULL , в противном
случае - expr1 . Эквивалентна оператору CASE WHEN x = y THEN NULL ELSE x
END :
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1
Отметим, что если аргументы равны, то величина expr1 вычисляется в MySQL
дважды.
IF(expr1,expr2,expr3)
-
Если
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).
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 ).
|