SQL中如何使用通配符匹配列表,替代多段LIKE OR拼接写法?
不同数据库的简洁实现方案
你要的类似IN的通配符列表匹配效果,不同主流数据库都有对应语法支持,无需拼接多个OR条件:
PostgreSQL 方案(最贴近你期望的写法)
直接使用原生支持的 LIKE ANY 语法,将通配符模式放入数组即可:
CASE WHEN job_title LIKE ANY (ARRAY['%Temp%', '%Intern%', '%Substitute%']) THEN true ELSE false END AS is_part_time,
MySQL 方案
用正则匹配函数 REGEXP 实现,多个匹配词用竖线分隔即可,默认就是包含匹配,无需额外写%:
CASE WHEN job_title REGEXP 'Temp|Intern|Substitute' THEN true ELSE false END AS is_part_time,
如果需要区分大小写可以替换为 REGEXP BINARY。
SQL Server 方案
2016及以上版本可以结合STRING_SPLIT函数实现:
CASE WHEN EXISTS ( SELECT 1 FROM STRING_SPLIT('Temp,Intern,Substitute', ',') t WHERE job_title LIKE '%' + t.value + '%' ) THEN 1 ELSE 0 END AS is_part_time,
注:SQL Server无原生布尔类型,用1/0代表真/假。
跨数据库通用可维护方案
如果需要兼容多种数据库,或者后续要频繁调整匹配关键词,可以把匹配关键词存入单独的字典表(比如part_time_keywords,字段keyword存储要匹配的兼职关键词),用子查询匹配:
CASE WHEN EXISTS ( SELECT 1 FROM part_time_keywords k WHERE job_title LIKE CONCAT('%', k.keyword, '%') ) THEN true ELSE false END AS is_part_time,
后续新增/删除匹配关键词只需维护字典表数据,无需修改SQL代码。
内容的提问来源于stack exchange,提问作者Vijay Shekhawat
相关产品推荐
相关产品推荐

