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
).
Add your own comment.