Справочное руководство по MySQL
6.3.1.4 Функции потока управления программой
- 6 Справочник по языку MySQL
- 6.3 Функции, используемые в операторах
SELECT
иWHERE
- 6.3.1 Операторы и функции общего назначения
- 6.3.1.1 Круглые скобки
- 6.3.1.2 Операторы сравнения
- 6.3.1.3 Логические операторы
- 6.3.1.4 Функции потока управления программой
- 6.3.1 Операторы и функции общего назначения
- 6.3 Функции, используемые в операторах
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
).