You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

重复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

火山引擎 最新活动