联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.9.4.10 条件函数
更新时间:10/23/2024, 6:50:57 AM

IF
函数语法 返回类型 描述

IF(booleantestCondition, valueTrue, valueFalseOrNull)

String

根据条件真假返回不同的值

参数说明

  • booleantestCondition:一个结果为 Boolean 值的条件语句或表达式。

  • valueTrue:当参数 booleantestCondition 结果为 true 或 NULL 时,所返回的值。

  • valueFalseOrNull:当参数 booleantestCondition 结果为 false 或 NULL 时,所返回的值。

注意事项

  • 返回参数 valueTrue 或 valueFalseOrNull 为 NULL 或空串时,仍然按照函数规则输出。

使用示例

SELECT IF(true,'trans','age') AS result FROM system.dual LIMIT 1;
复制

返回示例:

+---------+
| result  |
+---------+
| trans   |
+---------+
复制
COALESCE
函数语法 返回类型 描述

COALESCE(a1, a2, …​)

String

返回第一个非 null 的值

参数说明

  • a:参数。

注意事项

  • '' 默认转换为 NULL,当遇到空串时(如 space(0))则返回空。

使用示例

SELECT COALESCE(null,'trans','age') AS result FROM system.dual LIMIT 1;
复制

返回示例:

+---------+
| result  |
+---------+
| trans   |
+---------+
复制
CASE…WHEN
函数语法 返回类型 描述

CASE a WHEN b THEN c [WHEN d THEN e] [ELSE f] END

相应参数类型

根据条件返回不同的值:如果 a=b,返回 c,a=d 返回 e,以此类推,其他情况返回 f。CASE 到 END 中间可以有多个 WHEN x THEN y 的控制语句。

参数说明

  • a:被比较参数,与后面的参数 b,d 等进行比较。

  • b/d:条件参数,用于与 a 进行比较。

  • c/e/f:结果参数,当 a 与 b/d 比较时,满足哪一个条件就返回哪个条件参数对应的结果。

使用示例

SELECT CASE 't' WHEN 't' THEN 'trans' ELSE 'product' END AS result FROM system.dual;
复制

返回示例:

+---------+
| result  |
+---------+
| trans   |
+---------+
复制
CASE WHEN
函数语法 返回类型 描述

CASE WHEN a THEN b [WHEN c THEN d] [ELSE e] END

相应参数类型

根据参数真假返回不同值,如果 a=true,返回 b,如果 c=true,返回 d,以此类推,其他情况返回 e。CASE 到 END 中间可以有多个 WHEN x THEN y 的控制语句。

参数说明

  • a/c:条件参数,且必须为 BOOLEAN 值参数。

  • b/d/e:结果参数,对应的条件参数为 true 时,返回对应的结果。

使用示例

SELECT CASE WHEN TRUE THEN 'trans' ELSE 'product' END AS result FROM system.dual;
复制

返回示例:

+---------+
| result  |
+---------+
| trans   |
+---------+
复制
multiIf
函数语法 返回类型 描述

multiIf(cond_1, then_1, cond_2, then_2, …​, else)

相应参数类型

短路查询函数,允许在查询中更紧凑地编写 CASE 运算符。

参数说明

  • cond:条件表达式

  • then:满足对应条件时的取值

  • else:不满足所有条件时的取值

使用示例

select name,gpa, multiif(gpa>=3.5,'A',gpa < 3.5 and gpa >=3, 'B','C') level from zara order by gpa;
复制

返回示例

+-----------+------+--------+
|   name    | gpa  | level  |
+-----------+------+--------+
| lisi      | 2    | C      |
| zhaoliu   | 2    | C      |
| zhangsan  | 2    | C      |
| smith     | 3.1  | B      |
| lily      | 3.6  | A      |
| sara      | 3.8  | A      |
| wangwu    | 3.9  | A      |
+-----------+------+--------+
复制
[NOT] BETWEEN
函数语法 返回类型 描述

a BETWEEN b AND c

Boolean

用于检查一个值 a 是否在给定的范围 [b,c] 内。当 a 在闭区间 [b,c] 内,则返回 TRUE,否则返回 FALSE,若 a、b、c 中任一值为 "NULL",则返回 NULL。

a NOT BETWEEN b AND c

Boolean

用于检查一个值 a 是否不在给定的范围 [b,c] 内。当 a 在闭区间 [b,c] 内,则返回 FALSE,否则返回 TRUE,若 a、b、c 中任一值为 "NULL",则返回 NULL。

参数说明

  • a:被检查的目标参数,可以为任意基本数据类型。

  • b:范围区间的较小值。

  • c:范围区间的较大值。

使用示例

SELECT 15 BETWEEN 12 AND 20 AS RESULT;
复制

返回示例

+---------+
| result  |
+---------+
| true    |
+---------+
复制
[NOT] IN
函数语法 返回类型 描述

a IN range

Boolean

用于指定一个值是否在一个列表或子查询中。当 a 在范围 range 内,则返回 TRUE,否则返回 FALSE,若 a 或范围 range 为空 "NULL",则返回 NULL。

a NOT IN range

Boolean

用于指定一个值是否不在一个列表或子查询中。当 a 在范围 range 内,则返回 FALSE,否则返回 TRUE,若 a 或范围 range 为空 "NULL",则返回 NULL。

参数说明

  • a:被比较的对象,可以为任意基本数据类型。

  • range:用作比较的范围,可以是一个集合列表,也可以是一个子查询结果。

使用示例

SELECT 15 IN (1,11,18,20) AS RESULT;
复制

返回示例

+---------+
| result  |
+---------+
| false   |
+---------+
复制