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_value
ELSE
возвращается, или 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
= expr2
expr1
. Это - то же самое как CASE WHEN
. expr1
= expr2
THEN NULL ELSE expr1
END
mysql>SELECT NULLIF(1,1);
-> NULLmysql>SELECT NULLIF(1,2);
-> 1
Отметьте, что MySQL оценивает expr1
дважды, если параметры
не равны.