⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
CASE Statement

CASE 语句根据条件执行切换。基本形式与许多编程语言中使用的三元条件相同(CASE WHEN cond THEN a ELSE b END 等同于 cond ? a : b)。对于单一条件,可以使用 IF(cond, a, b) 来表达。

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE WHEN i > 2 THEN 1 ELSE 0 END AS test
FROM integers;
i 测试
1 0
2 0
3 1

这相当于:

SELECT i, IF(i > 2, 1, 0) AS test
FROM integers;

CASE 语句中的 WHEN cond THEN expr 部分可以链式连接,每当任何一个条件对单个元组返回 true 时,相应的表达式就会被评估并返回。

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE WHEN i = 1 THEN 10 WHEN i = 2 THEN 20 ELSE 0 END AS test
FROM integers;
i 测试
1 10
2 20
3 0

CASE 语句的 ELSE 部分是可选的。如果没有提供 else 语句且没有任何条件匹配,CASE 语句将返回 NULL

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE WHEN i = 1 THEN 10 END AS test
FROM integers;
i 测试
1 10
2 NULL
3 NULL

也可以在CASE之后但在WHEN之前提供一个单独的表达式。这样做时,CASE语句实际上被转换为一个switch语句。

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE i WHEN 1 THEN 10 WHEN 2 THEN 20 WHEN 3 THEN 30 END AS test
FROM integers;
i 测试
1 10
2 20
3 30

这相当于:

SELECT i, CASE WHEN i = 1 THEN 10 WHEN i = 2 THEN 20 WHEN i = 3 THEN 30 END AS test
FROM integers;