-
CASE
值
WHEN比较值
THEN结果
[WHEN比较值
THEN结果
...] [ELSE结果
] ENDCASE WHEN
条件
THEN结果
[WHEN条件
THEN结果
...] [ELSE结果
] END第一个
CASE
语法返回第一个
比较为真的结果。第二个语法返回第一个条件为真的结果。如果没有比较或条件为真,则返回值
=比较值
ELSE
之后的结果,或者如果没有ELSE
部分,则返回NULL
。Note这里描述的
CASE
运算符的语法与在存储程序中使用的 SQLCASE
语句的语法略有不同,见 第 15.6.5.1 节,“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
。Note还有一个
IF
语句,它与这里描述的IF()
函数不同。请参阅 第 15.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)
(一个字符串类型)。 -
如果
是 true,则返回expr1
=expr2
NULL
,否则返回expr1
。这与CASE WHEN
相同。expr1
=expr2
THEN NULL ELSEexpr1
END返回值的类型与第一个参数相同。
mysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1
NoteMySQL 如果参数不相等,则会对
expr1
进行两次评估。
对于这些函数,如果第一个参数仅包含第二个参数的字符集和排序规则中存在的字符(并且是常量),则使用第二个参数的字符集和排序规则来进行比较。系统变量值被视为同一字符集和排序规则的列值。在某些情况下,使用这些函数与系统变量的查询可能会被拒绝,错误信息为 Illegal mix of collations。在这种情况下,您应该将系统变量强制转换为正确的字符集和排序规则。