重复LIKE查询简化方案咨询:需用函数匹配含a、b、c等的单词
当然可以简化!这种重复写多个LIKE的查询确实有点繁琐,而且完全符合你「必须用函数」的要求,不同数据库有对应的函数可以搞定,我给你整理几个常用场景:
1. MySQL/MariaDB 环境
可以用REGEXP(或RLIKE,两者等价)函数,借助正则表达式的字符类来一次性匹配多个字符:
SELECT * FROM your_table WHERE your_column REGEXP '[abc]';
这里的[abc]表示匹配包含a、b、c中任意一个字符的内容,完美替代your_column LIKE '%a%' OR your_column LIKE '%b%' OR your_column LIKE '%c%'这种重复写法。
2. PostgreSQL 环境
你可以用regexp_match函数(完全符合函数要求),或者更常用的~正则匹配操作符:
-- 用regexp_match函数的写法 SELECT * FROM your_table WHERE regexp_match(your_column, '[abc]') IS NOT NULL; -- 简洁的~操作符写法(本质也是正则函数的语法糖) SELECT * FROM your_table WHERE your_column ~ '[abc]';
regexp_match会返回匹配到的结果数组,只要结果不为空,就说明字段里包含目标字符。
3. SQL Server 环境
用PATINDEX函数,它能返回模式匹配的起始位置,只要返回值大于0就说明存在目标字符:
SELECT * FROM your_table WHERE PATINDEX('%[abc]%', your_column) > 0;
这里的%[abc]%是SQL Server的通配符字符类,PATINDEX找到第一个匹配的位置,大于0就表示字段包含a、b、c中的任意一个。
4. Oracle 环境
Oracle有专门的REGEXP_LIKE函数来做正则匹配:
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '[abc]');
额外补充:如果要匹配完整单词
如果你的需求是匹配包含完整单词(比如"apple"、"banana"这类,而不是单个字符),只要把正则里的[abc]换成分组匹配即可,比如MySQL里可以写成:
SELECT * FROM your_table WHERE your_column REGEXP '(apple|banana|cherry)';
这样就能一次性匹配包含任意指定单词的内容,比多个LIKE拼接清爽多了!
内容的提问来源于stack exchange,提问作者Hee Do Park




