首页 > 解决方案 > 对 CASE WHEN SQL 的结果执行多值 LIKE

问题描述

是否可以对 CASE WHEN 的结果执行多值 LIKE (LIKE "x" OR "y" ..)。

我想达到的目标:

((CASE WHEN customerName IS NULL THEN "abc" ELSE "def" END) LIKE "a" OR "b" or "d")

我想避免做的事情:

((CASE WHEN customerName IS NULL THEN "abc" ELSE "def" END) LIKE "a") 
OR ((CASE WHEN customerName IS NULL THEN "abc" ELSE "def" END) LIKE "b") 
OR ((CASE WHEN customerName IS NULL THEN "abc" ELSE "def" END) LIKE "c")

标签: sqlpostgresqlcasesql-like

解决方案


您可以使用~运算符来执行类似正则表达式的表达式。例如,假设您有以下值:

'abc'
'qabc'
'ptestp'
'sometext'
'oneone'

如果您只想选择包含的那些,abc或者test您可以执行以下查询:

SELECT * FROM (VALUES ('abc'),
                      ('qabc'),
                      ('ptestp'),
                      ('sometext'),
                      ('oneone'))
example_data(label)
WHERE label ~ 'abc|test';

这只会选择以下值: abc, qabc, ptestp

请记住,~运算符在右侧接受正则表达式,因此您可以使用任何类型的模式(如完全匹配、单词开头匹配、单词结尾匹配等)。

例如以下查询:

SELECT * FROM (VALUES ('abc'),
                      ('abcc'),
                      ('ptestp'),
                      ('sometext'),
                      ('oneone'))
example_data(label)
WHERE label ~ '^abc$|^test$';

将仅选择第一行 ( abc),因为它要求单词完全匹配。


推荐阅读