|
Spec-Zone .ru
спецификации, руководства, описания, API
|
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
Первая версия возвращается result где .
Вторая версия возвращает результат для первого условия, которое является истиной. Если не было
никакого значения результата соответствия, результата после value=compare_valueELSE
возвращается, или NULL если есть нет ELSE
часть.
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
Тип возврата a CASE
выражение является совместимым агрегированным типом всех возвращаемых значений, но также и зависит
от контекста, в котором это используется. Если использующийся в строковом контексте, результат
возвращается как строка. Если использующийся в числовом контексте, результат возвращается как
десятичное число, вещественное число, или целочисленное значение.
Синтаксис CASE
выражение, показанное здесь, отличается немного от того
из SQL CASE оператор,
описанный в Разделе
13.6.5.1,"CASE Синтаксис", для использования в
сохраненных программах. CASE
оператор не может иметь ELSE NULL пункт, и это завершается с END CASE вместо END.
Если expr1 TRUE ( и expr1 <> 0) тогда expr1 <> NULLIF() возвраты
expr2; иначе это возвращается expr3. IF() возвращает числовое значение или строковое значение, в
зависимости от контекста, в котором оно используется.
mysql>SELECT IF(1>2,2,3);-> 3mysql>SELECT IF(1<2,'yes','no');-> 'yes'mysql>SELECT IF(STRCMP('test','test1'),'no','yes');-> 'no'
Если только один из expr2 или expr3 явно NULL, тип
результата IF()
функция является типом не -NULL выражение.
Тип возврата значения по умолчанию IF() (который может иметь значение, когда это сохранено во временную
таблицу), вычисляется следующим образом.
| Выражение | Возвращаемое значение |
|---|---|
expr2 или expr3
возвращает строку
|
строка |
expr2 или expr3
возвращает значение с плавающей точкой
|
с плавающей точкой |
expr2 или expr3возвращает
целое число
|
целое число |
Если expr2 и expr3 оба строки, результат является чувствительным к
регистру, если любая строка является чувствительной к регистру.
Есть также IF оператор, который
отличается от IF() функция,
описанная здесь. См. Раздел
13.6.5.2,"IF Синтаксис".
Если expr1 не NULL, IFNULL()
возвраты expr1; иначе это возвращается expr2. IFNULL() возвращает числовое значение или строковое значение, в
зависимости от контекста, в котором оно используется.
mysql>SELECT IFNULL(1,0);-> 1mysql>SELECT IFNULL(NULL,10);-> 10mysql>SELECT IFNULL(1/0,10);-> 10mysql>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 = expr2 THEN NULL ELSE expr1 END
mysql>SELECT NULLIF(1,1);-> NULLmysql>SELECT NULLIF(1,2);-> 1
Отметьте, что MySQL оценивает expr1 дважды, если параметры
не равны.