sql - 对 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")
解决方案
您可以使用~
运算符来执行类似正则表达式的表达式。例如,假设您有以下值:
'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
),因为它要求单词完全匹配。
推荐阅读
- wordpress - 设置 Wordpress 块教程的正确步骤?
- flutter - 无法在颤动中显示 RewardedVideoAd AdMob 广告
- javascript - iOS上的c ++,如何将抽象类型变量移动到线程中?
- c# - 将值从一个用户控件传递到另一个用户控件
- java - 按列表值分组并查找列表中使用的元素总数
- javascript - 节点 express 引用错误响应未定义
- c - 如何将调用函数作为 strcpy 中的第二个字符串?
- html - 忽略markdown-it中指定的HTML块?
- python - 如何通过在python代码中导入sqlite3来打开或创建数据库
- unity3d - 父对象时未调用 OnCollisionExit