#CASE

CASE 为条件选择控制操作符,包含如下两种形式:

  • CASE selector WHEN
  • CASE WHEN condition

# CASE selector WHEN

格式为:

CASE selector
WHEN selector_value_1 THEN result_1
WHEN selector_value_2 THEN result_2
...
WHEN selector_value_n THEN result_n
_[ ELSE _else_result ]
END;

其中,selector、selector_value_1 、selector_value_2、...、selector_value_n为表达式形式。

含义为:

首先计算CASE语句里的selector的值,如果值为NULL,则跳过所有WHEN语句向下寻找ELSE语句,如能找到ELSE语句,则执行else_result ,否则报错。

如果selector的值不为NULL,则将此值与向下第一个WHEN语句里的selector_value_1的值进行比较:

  • 如果selector的值与selector_value_1的值相等,则执行第一个WHEN语句里THEN之后的result_1,然后跳转到END结束;
  • 如果selector的值与selector_value_1的值不相等,则跳转到第二个WHEN语句,执行与第一个WHEN语句相同的操作;
  • ......
  • 如果selector的值与selector_value_n的值相等,则执行第n个WHEN语句里THEN之后的result_n,然后跳转到END结束;
  • 如果selector的值与selector_value_n的值不相等,则跳转到下一条语句:

如果下一条语句为ELSE语句,则执行else_result,然后跳转到END结束。

示例(单机HEAP表)

SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END result;
result
------
one

# CASE WHEN condition

格式为:

CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
_[ ELSE _else_result ]
END;

其中,condition_1 、condition_2、...、condition_n为能产生布尔值结果的条件表达式。

含义为:

首先判断第一个WHEN语句里的condition_1条件:

  • 如果condition_1的值为true,执行第一个WHEN语句里THEN之后的result_1,然后跳转到END结束;
  • 如果condition_1的值为false,跳转到第二个WHEN语句,执行与第一个WHEN语句相同的操作;
  • ......
  • 如果condition_n的值为true,执行第n个WHEN语句里THEN之后的result_n,然后跳转到END结束;
  • 如果condition_n的值为false,则跳转到下一条语句。

如果下一条语句为ELSE语句,则执行else_result,然后跳转到END结束。

示例(单机HEAP表)

SELECT CASE WHEN 1 > 0 THEN 'true' ELSE 'false' END result;
result
------
true
pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流