南大通用GBase 8a Gcluster MPP关于控制流函数的用法介绍

原文链接:https://www.gbase.cn/community/post/4361
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

今天给大家介绍如下几个控制流函数的使用方法:

1 CASE

语法1: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条件时,只返回第一个满足的值。

语法2: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

2 DECODE

语法:DECODE(value,value1,result1, value2,result2, value3,result3,... , result)

函数说明:类似于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 |
+-----------------------------------+
1 row in set

示例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

3 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

4 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

5 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

今天的内容希望对大家有所帮助,感谢阅读!

原文链接:https://www.gbase.cn/community/post/4361
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值