今天给大家介绍如下几个控制流函数的使用方法:
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
今天的内容希望对大家有所帮助,感谢阅读!