CASEvalueWHENcompare_valueTHENresult[WHENcompare_valueTHENresult...] [ELSEresult] ENDCASE WHENconditionTHENresult[WHENconditionTHENresult...] [ELSEresult] END第一个
CASE语法返回result第一个 为真的比较。第二种语法返回第一个条件为真的结果。如果没有比较或条件为真,则返回之后的结果,或者如果没有 部分。value=compare_valueELSENULLELSE笔记此处描述的运算符 语法与第 13.6.5.1 节“CASE 语句”中描述的 用于存储程序的 SQL语句略有不同 。该 语句不能有 子句,它以而不是 终止。
CASECASECASEELSE NULLEND CASEEND表达式结果的返回类型
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),则expr1IS NOT NULLIF()返回expr2。否则,它返回expr3。笔记还有一个statement,它与这里描述的 功能不同。请参阅 第 13.6.5.2 节,“IF 语句”。
IFIF()如果
expr2or 中只有一个expr3是显式NULL的,则函数的结果类型IF()是非NULL表达式的类型。的默认返回类型
IF()(当它存储到临时表中时可能很重要)计算如下:如果
expr2orexpr3产生一个字符串,则结果是一个字符串。如果
expr2和expr3都是字符串,则如果任一字符串区分大小写,则结果区分大小写。如果
expr2orexpr3产生一个浮点值,则结果是一个浮点值。如果
expr2orexpr3产生一个整数,则结果是一个整数。
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)STRINGREALINTEGERIFNULL()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=expr2expr1CASE WHENexpr1=expr2THEN NULL ELSEexpr1END返回值与第一个参数具有相同的类型。
mysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1笔记expr1如果参数不相等, MySQL 计算两次。