全部產品
Search
文件中心

AnalyticDB:控制流程函數

更新時間:Sep 07, 2024

控制流程函數可以在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運算式會依次對比expressionvalue。如果expressionvalue相等,則返回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)
  • 命令說明:如果conditiontrue,結果返回true_value;否則返回null

  • 樣本:

    SELECT IF((2+3)>4,5);
    +-------+
    | _col0 |
    +-------+
    |     5 |

用法2

IF(condition, true_value, false_value)
  • 命令說明:如果conditiontrue,結果返回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)
  • 命令說明:如果expr1expr2值相等,結果返回null;否則結果返回expr1的值。

  • 樣本:

    樣本1:

    SELECT NULLIF (2,1);
    +-------+
    | _col0 |
    +-------+
    |     2 |
    +-------+

    樣本2:

    SELECT NULLIF (2,2);
    +-------+
    | _col0 |
    +-------+
    | NULL  |
    +-------+