本文介绍AnalyticDB for MySQL中的条件判断函数。

本文中的条件判断函数以conditiontest表为测试数据。

create table conditiontest(a int) distributed by hash(a);
insert into conditiontest values (1),(2),(3);
SELECT * FROM conditiontest;
+---+
| a |
+---+
| 2 |
| 1 |
| 3 |

CASE

CASE expression
    WHEN value THEN result
    [ WHEN ... ]
    [ ELSE result ]
    END   
  • 命令说明:简单CASE表达式会从左到右依次查找value,直到找到和expression相等的value,并返回对应的result结果;如果没有找到相等的value,则返回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      |
CASE
    WHEN condition THEN result
    [ WHEN ... ]
    [ ELSE result ]
    END
  • 命令说明:高级CASE表达式会从左到右依次计算condition,直到第一个为TRUEcondition,并返回对应的result结果;如果没有找到为TRUEcondition,则返回ELSE语句后的result结果。
  • 示例:
    SELECT a,
          CASE a
          WHEN a=1 THEN 'one1'
          WHEN a=2 THEN 'two2'
          ELSE 'three3'
          END as caseresult
    FROM conditiontest;
    +---+------------+
    | a | caseresult |
    +---+------------+
    | 1 | one1       |
    | 3 | three3     |
    | 2 | three3     |

IF

if(condition, true_value)
  • 命令说明:如果conditiontrue,结果返回true_value;否则返回null
  • 示例:
    SELECT IF((2+3)>4,5);
    +-------+
    | _col0 |
    +-------+
    |     5 |
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的值。
  • 示例:
    SELECT IFNULL(NULL,2);
    +-------+
    | _col0 |
    +-------+
    |     2 |
    SELECT IFNULL(1,0);
    +-------+
    | _col0 |
    +-------+
    |     1 |

NULLIF

NULLIF(expr1,expr2)
  • 命令说明:如果expr1expr2值相等,结果返回null;否则结果返回expr1的值。
  • 示例:
    SELECT NULLIF (2,1);
    +-------+
    | _col0 |
    +-------+
    |     2 |
    SELECT NULLIF (2,2);
    +-------+
    | _col0 |
    +-------+
    | NULL  |