CASE
value
WHENcompare_value
THENresult
[WHENcompare_value
THENresult
...] [ELSEresult
] ENDCASE WHEN
condition
THENresult
[WHENcondition
THENresult
...] [ELSEresult
] END第一个
CASE
语法返回result
第一个 为真的比较。第二种语法返回第一个条件为真的结果。如果没有比较或条件为真,则返回之后的结果,或者如果没有 部分。value
=compare_value
ELSE
NULL
ELSE
笔记此处描述的运算符 语法与第 13.6.5.1 节“CASE 语句”中描述的 用于存储程序的 SQL语句略有不同 。该 语句不能有 子句,它以而不是 终止。
CASE
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
如果
expr1
是TRUE
(
和expr1
<> 0
),则expr1
IS NOT NULLIF()
返回expr2
。否则,它返回expr3
。笔记还有一个statement,它与这里描述的 功能不同。请参阅 第 13.6.5.2 节,“IF 语句”。
IF
IF()
如果
expr2
or 中只有一个expr3
是显式NULL
的,则函数的结果类型IF()
是非NULL
表达式的类型。的默认返回类型
IF()
(当它存储到临时表中时可能很重要)计算如下:如果
expr2
orexpr3
产生一个字符串,则结果是一个字符串。如果
expr2
和expr3
都是字符串,则如果任一字符串区分大小写,则结果区分大小写。如果
expr2
orexpr3
产生一个浮点值,则结果是一个浮点值。如果
expr2
orexpr3
产生一个整数,则结果是一个整数。
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'
的默认返回类型 是两个表达式中更“通用”的一个,顺序为、或。考虑基于表达式的表的情况,或者 MySQL 必须在临时表中内部存储返回值的情况:
IFNULL(
expr1
,expr2
)STRING
REAL
INTEGER
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 ELSEexpr1
END返回值与第一个参数具有相同的类型。
mysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1
笔记expr1
如果参数不相等, MySQL 计算两次。