MySQL 函数和运算符:控制流函数
跳到导航
跳到搜索
控制流函数:
Option Name | Description |
---|---|
CASE | Case 运算符 |
IF() | if/else 构造 |
IFNULL() | 空 if/else 构造 |
NULLIF() | 如果 expr1 = expr2,则返回 NULL |
“CASE WHEN THEN ELSE END”的两种形式:
- “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语句不能包含ELSE NULL子句,并且以“END CASE”而不是“END”终止。
示例:
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),则返回“expr2”,否则返回“expr3”。
- 如果“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'
“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)”:如果“expr1 = expr2”为 true,则返回 NULL,否则返回“expr1”。【这与“CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END”相同】
示例:
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1