跳至主要內容

流程控制函数

Jin大约 5 分钟

流程控制函数

参考

NameDescription
CASEopen in new windowCase operator
IF()open in new windowIf/else construct
IFNULL()open in new windowNull if/else construct
NULLIF()open in new windowReturn NULL if expr1 = expr2

1、CASE

示例

SELECT CASE 1
           WHEN 1 THEN 'one'
           WHEN 2 THEN 'two'
           ELSE 'more' END;
# one

SELECT CASE WHEN 1 > 0 THEN 'true' ELSE 'false' END;
# true

SELECT CASE BINARY 'B'
           WHEN 'a' THEN 1
           WHEN 'b' THEN 2 END;
# NULL

语法

`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`

第一个CASEopen in new window语法返回第 result一个为 value=compare_value 的比较。第二种语法返回第一个条件为真的结果。如果没有比较或条件为真,则返回之后的结果,或者如果没有 部分。 value=compare_value``ELSE``NULL``ELSE

表达式结果的返回类型CASEopen in new window 是所有结果值的聚合类型:

2、IF

IF(*expr1*,*expr2*,*expr3*)

如果*expr1TRUE (*expr1* <> 0*expr1* IS NOT NULL),IF() 则返回expr2。否则,它返回expr3*。

如果*expr2or 中只有一个expr3*是显式的 NULL,则函数的结果类型 IF()open in new window是非表达式的类型NULL

的默认返回类型IF()open in new window (当它存储到临时表中时可能很重要)计算如下:

  • 如果*expr2*or *expr3*产生一个字符串,则结果是一个字符串。

    如果*expr2*和 *expr3*都是字符串,则如果任一字符串区分大小写,则结果区分大小写。

  • 如果*expr2*or *expr3*产生一个浮点值,则结果是一个浮点值。

  • 如果*expr2*or *expr3*产生一个整数,则结果是一个整数。

SELECT IF(1 > 2, 2, 3);
# 3
SELECT IF(1 < 2, 'yes', 'no');
# 'yes'
SELECT IF(STRCMP('test', 'test1'), 'no', 'yes');
# 'no'

3、STRCMP

MySQL中的STRCMP()函数用于比较两个字符串。如果两个字符串相同,则返回0,如果根据定义的顺序第一个参数小于第二个参数,则返回-1,而当第二个参数小于第一个参数时,返回1。

**用法:**STRCMP(Str1,Str2)

**参数:**此方法接受two-parameter,如下所述:

  • **str1:**这是用于比较的第一个字符串。
  • **str2:**这是用于比较的第二个字符串。

**返回值:**它可以赋予四种价值-

  • 如果string1 = string2,则此函数返回0
  • 如果string1 <string2,则此函数返回-1
  • 如果string1> string2,则此函数返回1
  • 如果一个或两个字符串均为NULL,则此函数返回NULL。

**示例1:**STRCMP()函数比较两个相等的字符串。由于两个给定的字符串相等,因此将返回0。

4、IFNULL

IFNULL(*expr1*,*expr2*)

如果*expr1*不是 NULLIFNULL()则返回 expr1;否则返回 expr2

SELECT IFNULL(1, 0);
# 1
SELECT IFNULL(NULL, 10);
# 10
SELECT IFNULL(1 / 0, 10);
# 10
SELECT IFNULL(1 / 0, 'yes');
# 'yes'

5、NULLIF

NULLIF(expr1,expr2*)

如果expr1 = expr2 则返回null,不相等则返回expr1

*expr1*如果参数不相等, MySQL 计算两次。

NULL如果 为真则 返回,否则返回。这与 . *expr1* = *expr2*expr1CASE WHEN *expr1* = *expr2* THEN NULL ELSE *expr1* END

返回值与第一个参数具有相同的类型。

SELECT NULLIF(1, 1);
# NULL
SELECT NULLIF(1, 2);
# 1
贡献者: Jin