SQL使用单个LIKE子句匹配多个字符串模式的实现方案
方案1:正则表达式匹配(主流数据库通用)
将所有待匹配的关键词用|拼接为正则规则,单次匹配即可覆盖所有条件,不需要重复写OR判断:
- MySQL 写法:
SELECT * FROM Table_1 WHERE Column_A REGEXP 'AB|BE|DE';
- PostgreSQL 写法:
SELECT * FROM Table_1 WHERE Column_A ~ 'AB|BE|DE';
- Oracle 写法:
SELECT * FROM Table_1 WHERE REGEXP_LIKE(Column_A, 'AB|BE|DE');
- SQL Server 写法:
SELECT * FROM Table_1 WHERE Column_A REGEXP 'AB|BE|DE';
注意:如果待匹配关键词包含
.、*、+等正则特殊字符,拼接规则前需要先转义特殊字符,避免匹配逻辑出错。
方案2:关键词表关联匹配(适合关键词数量多、动态更新的场景)
如果你的关键词后续会频繁增减,或者数量超过几十个,建议单独建一张关键词存储表Keyword_List,字段为keyword,存储所有待匹配的取值,用关联查询实现匹配:
SELECT DISTINCT t1.* FROM Table_1 t1 INNER JOIN Keyword_List kl ON t1.Column_A LIKE CONCAT('%', kl.keyword, '%');
这种方案后续调整关键词只需要修改Keyword_List的表数据,不需要改动SQL代码,维护成本极低。
方案3:数组匹配(支持数组类型的数据库适用)
PostgreSQL、ClickHouse等支持数组类型的数据库,可以直接用数组匹配函数简化写法:
-- PostgreSQL 示例 SELECT * FROM Table_1 WHERE Column_A LIKE ANY (ARRAY['%AB%', '%BE%', '%DE%']);
你只需要把所有关键词前后拼接%放到数组中即可,不需要写多个OR条件。
内容的提问来源于stack exchange,提问作者lekythos
相关产品推荐
相关产品推荐

