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 '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