如何使用Postgres CASE简单/速记语法与多个条件?



我知道使用Postgres CASE表达式,您可以将其简化为:

SELECT a,
CASE a WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'other'
END
FROM test;

…所以你不必写etc…

CASE
WHEN a = 1 THEN ''
WHEN a = 2 THEN ''
.
..
...
WHEN a = 99 or a = 100 THEN ''
ELSE '' END

但是有没有办法在多个条件上做到这一点呢?使用关键字ILIKE? 例如

SELECT a,
CASE a WHEN LIKE '1' or LIKE 'one'  THEN 'one'
WHEN LIKE '2' and (LIKE 'two' or LIKE 'too') THEN 'two'
ELSE 'other'
END
FROM test;

显然这上面不起作用,我尝试了一些其他的变化,但不能让它工作(如果可能的话)?

不,简短的CASE语法只适用于每个分支的单个条件,并且必须与=操作符进行比较。根据需要使用其他语法

您可以在这里使用Postgres的正则表达式运算符:

SELECT a,
CASE WHEN a ~ '^(1|one)$' THEN 'one'
WHEN a ~ '^(2|two)$' THEN 'two'
ELSE 'other'
END
FROM test;

最新更新