流程控制运算符
官档链接:https://dev.mysql.com/doc/refman/8.0/en/control-flow-functions.html
名称 | 描述 |
---|---|
CASE | case n when x then y |
IF() | if … else构造 |
IFNULL() | Null if / else构造 |
NULLIF() | 如果expr1 = expr2,则返回NULL |
CASE
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
第一个CASE语法返回 result第一个 为true的比较。第二种语法返回第一个条件为true的结果。如果没有比较或条件为真,则返回结果,或者如果没有 部分。 value=compare_valueELSENULLELSE
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
IF(expr1,expr2,expr3)
如果expr1是TRUE (expr1 <> 0和expr1 <> NULL),则IF() 返回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'
IFNULL(expr1,expr2)
如果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'
NULLIF(expr1,expr2)
等价于:CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
返回值与第一个参数的类型相同。
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1
注意
expr1如果参数不相等, MySQL将评估两次。