Spec-Zone.ru › MySQL 5.7

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

Таблица 12.7 Операторы управления потоком

Таблица 12.7 Операторы управления потоком
Имя Описание
CASE Оператор case
IF() Конструкция if/else
IFNULL() Конструкция null if/else
NULLIF() Возвращает NULL, если expr1 = expr2

  • 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

    Первый синтаксис CASE возвращает result для первого value=compare_value сравнения, которое истинно. Второй синтаксис возвращает результат для первого истинного условия. Если ни одно сравнение или условие не истинно, возвращается результат после ELSE или NULL, если нет части ELSE.

    Примечание

    Синтаксис оператора CASE отличается от синтаксиса оператора CASE SQL CASE, используемого внутри хранимых программ. Оператор CASE не может иметь ELSE NULL-условие и завершается с END CASE вместо END.

    Тип возвращаемого значения выражения CASE — агрегированный тип всех значений результатов.

    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
    
  • IF(expr1,expr2,expr3)

    Если expr1 истинно (expr1 <> 0 и expr1 IS NOT NULL), IF() возвращает expr2. В противном случае, возвращает expr3.

    Примечание

    Также существует оператор IF, который отличается от функции IF(). См. Раздел 13.6.5.2, «Оператор IF».

    Если только одно из expr2 или expr3 явно NULL, тип результата функции IF() — тип не-NULL выражения.

    Тип результата по умолчанию функции IF() (что может быть важно при сохранении в временную таблицу) вычисляется следующим образом:

    • Если expr2 или expr3 возвращают строку, результат — строка.

      Если expr2 и expr3 — обе строки, результат чувствителен к регистру, если хотя бы одна строка чувствительна к регистру.

    • Если expr2 или expr3 возвращают число с плавающей точкой, результат — число с плавающей точкой.

    • Если expr2 или expr3 возвращают целое число, результат — целое число.

    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'
    
  • IFNULL(expr1,expr2)

    Если expr1 не NULL, IFNULL() возвращает expr1; иначе, возвращает expr2.

    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'
    

    Тип результата по умолчанию для IFNULL(expr1,expr2) — более «общий» из двух выражений в порядке STRING, REAL или INTEGER. Рассмотрим случай таблицы, основанной на выражениях, или когда MySQL должен внутренне сохранить значение, возвращённое IFNULL(), во временной таблице:

    mysql> CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
    mysql> DESCRIBE tmp;
    +-------+--------------+------+-----+---------+-------+
    | Field | Type         | Null | Key | Default | Extra |
    +-------+--------------+------+-----+---------+-------+
    | test  | varbinary(4) | NO   |     |         |       |
    +-------+--------------+------+-----+---------+-------+
    

    В этом примере тип колонки test — VARBINARY(4) (тип строки).

  • NULLIF(expr1,expr2)

    Возвращает NULL, если expr1 = expr2 истинно, иначе возвращает expr1. Это эквивалентно CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.

    Возвращаемое значение имеет тот же тип, что и первый аргумент.

    mysql> SELECT NULLIF(1,1);
            -> NULL
    mysql> SELECT NULLIF(1,2);
            -> 1
    
    Примечание

    MySQL вычисляет expr1 дважды, если аргументы не равны.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/flow-control-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API