流程控制函数
流程控制函数
参考
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
*。
如果*expr2
or 中只有一个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*
expr1
CASE WHEN *
expr1* = *
expr2* THEN NULL ELSE *
expr1* END
返回值与第一个参数具有相同的类型。
SELECT NULLIF(1, 1);
# NULL
SELECT NULLIF(1, 2);
# 1