控制流函数

控制流函数可以在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表达式会依次对比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  |
    +-------+