GBase8a_控制流函数
控制流函数
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 setDECODE
函数说明
类似于 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 setIF(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 setIFNULL(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 setNULLIF(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评论
热门帖子
- 12025-12-01浏览数:182765
- 22023-05-09浏览数:25067
- 42023-09-25浏览数:18527
- 52020-05-11浏览数:17529