Поиск

Функции управления потоком выполнения

  • 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)
Если выражение выражение! истинно (выражение1 о 0 и выражение1 о NULL), то IF() возвращает выражение!, иначе - выражение3. IF() возвращает числовое или строковое значение, в зависимости от контекста, в котором применяется.
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.