12.5 Функции управления потоком
Таблица 12.7 Операторы управления потоком
-
CASEvalueWHENcompare_valueTHENresult[WHENcompare_valueTHENresult...] [ELSEresult] ENDCASE WHENconditionTHENresult[WHENconditionTHENresult...] [ELSEresult] ENDПервый синтаксис
CASEвозвращаетresultдля первогосравнения, которое истинно. Второй синтаксис возвращает результат для первого истинного условия. Если ни одно сравнение или условие не истинно, возвращается результат послеvalue=compare_valueELSEилиNULL, если нет частиELSE.ПримечаниеСинтаксис оператора
CASEотличается от синтаксиса оператора CASE SQLCASE, используемого внутри хранимых программ. Оператор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 -
Если
expr1истинно (иexpr1<> 0),expr1IS NOT NULLIF()возвращает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' -
-
Если
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)(тип строки). -
Возвращает
NULL, еслиистинно, иначе возвращаетexpr1=expr2expr1. Это эквивалентноCASE WHEN.expr1=expr2THEN NULL ELSEexpr1ENDВозвращаемое значение имеет тот же тип, что и первый аргумент.
mysql>
SELECT NULLIF(1,1);-> NULL mysql>SELECT NULLIF(1,2);-> 1ПримечаниеMySQL вычисляет
expr1дважды, если аргументы не равны.
© 2025 Oracle
Licensed under the GPLv2 License.