控制流程函數可以在SQL查詢中實現條件判斷。本文介紹AnalyticDB for 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 | +-------+