GBase 8a
运维管理
文章

GBase8a_控制流函数

发表于2026-01-30 15:17:07149次浏览4个评论

控制流函数

CASE

语法

CASE value WHEN [compare-value] THEN result [WHEN [compare-value]
THEN result ...] [ELSE result] END

函数说明

逐一匹配,当满足 value=compare-value 时,返回对应的 result,如果未找到匹配项,则返回 ELSE 后的 result。如果没有 ELSE 子句,默认返回 NULL。

如果条件中 compare-value 有重叠,即 value 值满足多个 compare-value 条件时,只返回第一个满足的值。

语法

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]
[ELSE result] END

函数说明

逐一判断, 当 condition 为 TRUE 时, 返回对应的 result, 如果 condition 全为 FALSE,则返回 ELSE 后的 result。如果没有 ELSE 子句,默认返回 NULL。

一个 CASE 表达式的默认返回值类型是所有返回值的相容集合类型,具体情况视其所在语境而定:如用在字符串语境中,则返回结果为字符串;

如用在数字语境中,则返回结果为十进制值的实数值或整数值。

示例

示例 1:value=compare-value,返回对应的 result 值。

gbase> SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE
'more' END FROM dual;
+-------------------------------------------------------------+
| CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END |
+-------------------------------------------------------------+
| one |
+-------------------------------------------------------------+
1 row in set

示例 2:condition 为 TRUE 时,返回对应的 result 值。

gbase> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END FROM
dual;
+---------------------------------------------+
| CASE WHEN 1>0 THEN 'true' ELSE 'false' END |
+---------------------------------------------+
| true |
+---------------------------------------------+
1 row in set

示例 3:value 不等于 compare-value,返回值为 NULL。

gbase> SELECT CASE 'c' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END
FROM dual;
+-----------------------------------------------+
| CASE 'c' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END |
+-----------------------------------------------+
| NULL |
+-----------------------------------------------+
1 row in set

DECODE

函数说明

类似于 CASE value WHEN value1 THEN result1 ....,唯一区别是如果 value 为NULL 值,可以和后面的 NULL 值匹配。

示例

示例 1:没有匹配的 value 值,返回值为 result。

gbase> SELECT DECODE(5,1,10,2,20,3,30,4,40, 50) FROM dual;
+-----------------------------------+
| DECODE(5,1,10,2,20,3,30,4,40, 50) |
+-----------------------------------+
| 50 |
+------------------

示例 2:value 为表达式,与 value1 匹配,返回值为 result1。

gbase> SELECT DECODE( (2 * 5) ,10,100,20,200,600) FROM dual;
+-------------------------------------+
| DECODE( (2 * 5) ,10,100,20,200,600) |
+-------------------------------------+
| 100 |
+-------------------------------------+
1 row in set

IF(expr1,expr2,expr3)

语法

IF(expr1,expr2,expr3)

函数说明

如果 expr1 为 TRUE 则 IF()的返回值为 expr2,如果 expr1 取值为 FALSE、0 或 NULL,则返回值为 expr3。

IF()的返回值规则同 CASE 表达式返回值的规则。

示例

示例 1:expre1 的值为 FALSE,返回值为 expr3。

gbase> SELECT IF(FALSE,2,3) FROM dual;
+-------------+
| IF(FALSE,2,3) |
+-------------+
| 3 |
+-------------+
1 row in set

示例 2:expre1 的值为 TRUE,返回值为 expr2。

gbase> SELECT IF(TRUE,'yes','no') FROM dual;
+--------------------+
| IF(TRUE,'yes','no') |
+--------------------+
| yes |
+--------------------+
1 row in set

示例 3:expr1 为表达式,值为 TRUE,返回值为 expr2。

gbase> SELECT IF(1<2,'no','yes') FROM dual;
+---------------------------------------+
| IF(1<2,'no','yes') |
+---------------------------------------+
| no |
+---------------------------------------+
1 row in set

示例 4:expr1 为表达式,值不为 TRUE,返回值为 expr3。

gbase> SELECT IF(1>2,NULL,'no') FROM dual;
+-------------------+
| IF(1>2,NULL,'no') |
+-------------------+
| no |
+-------------------+
1 row in set

IFNULL(expr1,expr2)

语法

IFNULL(expr1,expr2)

函数说明

如果 expr1 不为 NULL,则 IFNULL()的返回值为 expr1,否则其返回值为 expr2。

IFNULL()的返回值是数字或是字符串, 具体情况取决于使用它的上下文环境。等价于 IF(expre1,expre1,expre2)。

示例

示例 1:expr1 不为 NULL,返回值为 expr1。

gbase> SELECT IFNULL(1,0) FROM dual;
+-------------+
| IFNULL(1,0) |
+-------------+
| 1 |
+-------------+
1 row in set

示例 2:expr1 为 NULL,返回值为 expr2。

gbase> SELECT IFNULL(NULL,10) FROM dual;
+-----------------+
| IFNULL(NULL,10) |
+-----------------+
| 10 |
+-----------------+
1 row in set

NULLIF(expr1,expr2)

语法

NULLIF(expr1,expr2)

函数说明

如果 expr1 = expr2 成立,返回值为 NULL,否则返回值为 expr1。

等价于 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。

示例

示例 1:expr1 = expr2,返回值为 NULL。

gbase> SELECT NULLIF(1,1) FROM dual;
+-------------+
| NULLIF(1,1) |
+-------------+
| NULL |
+-------------+
1 row in set

示例 2:expr1 != expr2,返回值为 expr1。

gbase> SELECT NULLIF(1,2) FROM dual;
+-------------+
| NULLIF(1,2) |
+-------------+
| 1 |
+-------------+
1 row in set

评论

登录后才可以发表评论
GBase用户21143发表于 6个月前
感谢分享
用户头像
GBase用户28017发表于 6个月前
谢谢分享。
用户头像
mittens发表于 6个月前
学习了
用户头像
山佳发表于 2个月前
谢谢分享