控制流函数可以在SQL查询中实现条件判断。本文介绍云原生数据仓库 AnalyticDB MySQL 版控制流函数的用语与示例。
示例数据
本文的控制流函数以conditiontest
表为测试数据。
创建测试表并写入测试数据:
CREATE TABLE conditiontest(a INT) DISTRIBUTED BY HASH(a);
INSERT INTO conditiontest VALUES (1),(2),(3);
CASE
用法1
CASE expression
WHEN value THEN result
[WHEN value THEN result ...]
[ELSE result]
END
命令说明:
CASE
表达式会依次对比expression
和value
。如果expression
和value
相等,则返回value
对应的result
;如果所有value
都不等于expression
,则返回ELSE
对应的result
。示例:
SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'three' END as caseresult FROM conditiontest;
结果如下:
+---+------------+ | a | caseresult | +---+------------+ | 2 | two | | 1 | one | | 3 | three | +---+------------+
用法2
CASE
WHEN condition THEN result
[WHEN condition THEN result...]
[ELSE result]
END
命令说明:
CASE
表达式会依次计算condition
。如果condition
为true,则返回condition
对应的result
;如果所有condition
都为false,则返回ELSE
对应的result
。示例:
SELECT a, CASE WHEN a=1 THEN 'one1' WHEN a=2 THEN 'two2' ELSE 'three3' END as caseresult FROM conditiontest;
结果如下:
+---+------------+ | a | caseresult | +---+------------+ | 1 | one1 | | 3 | three3 | | 2 | two2 | +---+------------+
IF
用法1
IF(condition, true_value)
命令说明:如果
condition
为true
,结果返回true_value
;否则返回null
。示例:
SELECT IF((2+3)>4,5);
+-------+ | _col0 | +-------+ | 5 |
用法2
IF(condition, true_value, false_value)
命令说明:如果
condition
为true
,结果返回true_value
;否则结果返回false_value
。示例:
SELECT IF((2+3)<5,5,6);
+-------+ | _col0 | +-------+ | 6 |
IFNULL
IFNULL(expr1,expr2)
命令说明:如果
expr1
结果不为空,则返回expr1
的值;否则返回expr2
的值。示例:
示例1:
SELECT IFNULL(NULL,2);
+-------+ | _col0 | +-------+ | 2 | +-------+
示例2:
SELECT IFNULL(1,0);
+-------+ | _col0 | +-------+ | 1 | +-------+
NULLIF
NULLIF(expr1,expr2)
命令说明:如果
expr1
与expr2
值相等,结果返回null
;否则结果返回expr1
的值。示例:
示例1:
SELECT NULLIF (2,1);
+-------+ | _col0 | +-------+ | 2 | +-------+
示例2:
SELECT NULLIF (2,2);
+-------+ | _col0 | +-------+ | NULL | +-------+