:: DEVELOPER ZONE
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'
В 4.0.6 и раньше по умолчанию возвращал для IFNULL(expr1,expr2)
более "общее" из двух выражений в порядке STRING
, REAL
или
INTEGER
. Разница с более ранними версиями MySQL больше всего заметна
тогда, когда вы создаете таблицу, основанную на выражении или MySQL внутренне
сохраняет величину, основанную на выражении IFNULL()
во временной
таблице.
CREATE TABLE foo SELECT IFNULL(1,"test") as test;
В 4.0.6 тип для столбца "test" - CHAR(4)
в то время как на более ранних типом был бы
BIGINT
.
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'
Если expr2
или expr3
являются NULL
тогда результирующим
типом IF()
будет тип, который не есть NULL
. Это нововведение в
MySQL 4.0.3.
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
).
© 1995-2005 MySQL AB. All rights reserved.