流程控制函数
流程控制函数
参考
| Name | Description |
|---|---|
CASE | Case operator |
IF() | If/else construct |
IFNULL() | Null if/else construct |
NULLIF() | Return 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`
第一个CASE语法返回第 result一个为 value=compare_value 的比较。第二种语法返回第一个条件为真的结果。如果没有比较或条件为真,则返回之后的结果,或者如果没有 部分。 value=compare_value``ELSE``NULL``ELSE
表达式结果的返回类型CASE 是所有结果值的聚合类型:
- 如果所有类型都是数字,则聚合类型也是数字:
- 如果所有类型都是
BIT,则结果是BIT。否则,BIT参数的处理方式类似于BIGINT。 - 如果所有类型都是
YEAR,则结果是YEAR。否则,YEAR参数的处理方式类似于INT。 - 如果所有类型都是字符串(
CHAR或VARCHAR),则结果的VARCHAR最大长度由操作数的最长字符长度决定。 - 如果所有类型都是字符或二进制字符串,则结果为
VARBINARY. SET并被ENUM视为类似VARCHAR; 结果是VARCHAR。- 如果所有类型都是
JSON,则结果是JSON。 - 如果所有类型都是时间的,则结果是时间的:
- 如果所有类型都是
GEOMETRY,则结果是GEOMETRY。 - 如果任何类型是
BLOB,则结果是BLOB。 - 对于所有其他类型组合,结果为
VARCHAR。 NULL类型聚合忽略 文字操作数。
2、IF
IF(*expr1*,*expr2*,*expr3*)如果*
expr1是TRUE(*expr1* <> 0和*expr1* IS NOT NULL),IF()则返回expr2。否则,它返回expr3*。
如果*expr2or 中只有一个expr3*是显式的 NULL,则函数的结果类型 IF()是非表达式的类型NULL。
的默认返回类型IF() (当它存储到临时表中时可能很重要)计算如下:
如果*
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*不是NULL,IFNULL()则返回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
