MySQL 函数和运算符:控制流函数

来自Wikioe
跳到导航 跳到搜索


控制流函数:

Option Name Description
CASE Case 运算符
IF() if/else 构造
IFNULL() 空 if/else 构造
NULLIF() 如果 expr1 = expr2,则返回 NULL


CASE WHEN THEN ELSE END”的两种形式:

  1. “CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END”
  2. “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()”(将其存储到临时表中时可能很重要)的计算如下:

  1. 如果“expr2”或“expr3”生成字符串,则结果为字符串。
  2. 如果“expr2”和“expr3”都是字符串,则如果任一字符串区分大小写,则结果区分大小写。
  3. 如果“expr2”或“expr3”产生浮点值,则结果为浮点值。
  4. 如果“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