- CASE значение WHEN [значение-сравнения] THEN результат [WHEN [значение сравнения] THEN результат …] [ELSE результат] END,
CASE WHEN [условие] THEN результат [WHEN [условие] THEN результат …] [ELSE результат] END
Первая версия возвращает результат, когда значение=значение-сравнения. Вторая версия возвращает результат для первого истинного условия. Если нет соответствующего результирующего значения, возвращается результат, следующий за словом ELSE, либо NULL, если ELSE отсутствует.
mysql> SELECT CASE 1 WHEN 1 THEN ‘one’ WHEN 2 THEN ‘two1 ELSE ‘more’ END;
-> ‘one’ mysql> SELECT CASE WHEN l>0 THEN ‘true’ ELSE ‘false1 END;
-> ‘true’ mysql> SELECT CASE BINARY ‘B’ WHEN ‘a’ THEN 1 WHEN ‘b’ THEN 2 END;
-> NULL
Тип возвращаемого значения (INTEGER, DOUBLE или STRING) определяется типом первого возвращаемого значения (выражения после первого THEN). Функция CASE появилась в MySQL 3.23.3.
- IF(выражение1,выражение2,выражение3)
mysql> SELECT IF(1>2,2,3);
-> 3 mysql> SELECT IF(1<2,’yes1,‘no1);
-> ‘yes’ mysql> SELECT IF(STRCMP(‘test’,’testl’),’no’,’yes’);
-> ‘no’
Если только одно из выражений выражение! или выражениеЗ равно NULL, тип результата функции IF() будет типом выражения, отличного от NULL. (Такое поведение принято, начиная с MySQL 4.O.3.)
выражение1 вычисляется как целое значение, что означает, что если вы проверяете число с плавающей точкой или строку, то должны это делать с помощью операции сравнения.
mysql> SELECT IF(0.1,1,0);
-> О
mysql> SELECT IF(0.K>0,1,0);
-> 1
В первом случае IF(0.1) вернет 0, потому что 0.1 преобразуется в целое, что приводит к проверке IF(0). Это может быть не тем, чего вы ожидаете. Во втором случае сравнение проверяет исходное значение с плавающей точкой на равенство нулю. Результат сравнения трактуется как целое.
Тип возврата по умолчанию для IF() (что может быть существенно при сохранении его во временной таблице) вычисляется MySQL следующим образом:
Выражение | Возвращаемое значение |
выражение! или выражениеЗ | Строка |
выражение! или выражениеЗ | Число с плавающей точкой |
выражение! или выражениеЗ | Целое число |
Если выражение! и выражениеЗ являются строками, результат чувствителен к регистру, если любая из строк чувствительна к регистру (начиная с MySQL 3.23.51). IFNULL (выражение1,выражение!)
Если выражение1 не равно NULL, IFNULLO возвратит выражение1, иначе выражение!. IFNULL O) возвращает число или строку, в зависимости от контекста, в котором вызывается.
mysql> SELECT IFNULL(l,0);
-> 1 mysql> SELECT IFNULL(NULL,10);
-> 10 mysql> SELECT IFNULL(l/0,10);
-> 10 raysql> SELECT IFNULL(l/0, ‘yes’) ;
-> ‘yes’
В MySQL 4.0.6 и выше возвращаемое IFNULL{выражение!, выражение2) значение по умолчанию определяется, как более “общее” из двух, в таком порядке: STRING, REAL или INTEGER. Отличие от предшествующих версий MySQL наиболее ярко проявляется, когда вы создаете таблицу на базе выражений, либо когда MySQL должен скрыто сохранять ifnull () во временной таблице.
CREATE TABLE tmp SELECT IFNULL(1,ftest1) AS test;
Начиная с MySQL 4.0.6, типом столбца test будет CHAR (4), в то время как в более ранних версиях типом будет BIGINT.
- NULLIF{выражение!,выражение2)
Возвращает NULL, если выражение! =выражение2, иначе возвращает выражение!. Это то же самое, что CASE when выражение1=выражение2 THEN NULL ELSE выражение! END.
mysql> SELECT NULLIF(1,1);
-> NULL mysql> SELECT NULLIF(1,2);
-> 1
Следует отметить, что MySQL дважды вычисляет выражение выражение!, если
аргументы не равны.
Функция NULLIF () появилась в MySQL 3.23.15.