MySQL REGEXP 利用正则表达式,在查询中过滤多个字符串
创始人
2025-05-29 11:29:58
0

1. 需求说明

由于业务更新,需要在原有的SQL分页查询基础上,添加一个条件,将一个字段带含有(“A”,“B”)字符串的的数据排除在外,排除字符串是根据不同的业务配置的,它是一个动态的参数。

若字段内容为:
- ABCD
- A
- BAA
- AAABBAA
排除内容为:BB,BC,D
则筛选后的结果为:A,BAA

测试数据(要求:过滤带有指定关键字的列):

INSERT INTO `content_xx` (`id`, `content`) VALUES (1, '沿西巴霞曲河谷,穿越“山南之南”');
INSERT INTO `content_xx` (`id`, `content`) VALUES (2, '甘肃西北的干旱戈壁是珍稀植物隐居的乐土');
INSERT INTO `content_xx` (`id`, `content`) VALUES (3, '安集海大峡谷之冬');
INSERT INTO `content_xx` (`id`, `content`) VALUES (4, '喀斯特瀑布 繁星般点缀了 219国道滇桂段');
INSERT INTO `content_xx` (`id`, `content`) VALUES (5, '海蚀拱 中国海岸的珍稀景观');
INSERT INTO `content_xx` (`id`, `content`) VALUES (6, '柴达木水上雅丹 “西部千岛湖”的变化、秘密与隐忧');
INSERT INTO `content_xx` (`id`, `content`) VALUES (7, '伟大的征途——布伦托海大迁徙');



2. 尝试

尝试过的方法:

  1. 对于这种排除多个字符串的查询,无法用到常规的函数,例如LIKE、UNION、FIND_IN_SET、NOT IN等。

    NOT LIKE只能判断单个字符串,NOT IN、FIND_IN_SET又只能精准匹配,无法从语句中提取关键字。


  1. 通过子查询一遍遍过滤。

    然后想到的是既然NOT LIKE可以排除一个,那我就一个个排除不就好了?通过NOT LIKE + EXISTS子查询语句的方式来排除每一个排除项。这种方法比较傻瓜式,且效率肉眼可见的低下,不适合作为首选方法。


  1. 考虑过在代码中通过正则查询,但是这种方法得自己做物理分页,而且得大幅度修改源代码,效率更低。



3. REGEXP 正则过滤

注意!!!


低版本的MySQL一些正则表达式都不起作用,会报错:1139 - Got error ‘repetition-operator operand invalid’ from regexp


可以参考这篇文章:1139 - Got error ‘repetition-operator operand invalid’ from regexp

我本地的MySQL(8.0)可以执行下面所有的正则,然后放到开发环境(5.7)就只有第三条可以正常使用(这一条还是我不断试出来的)。

select version() from dual;
在这里插入图片描述
在这里插入图片描述

将正则表达式作为参数拼接进去,就可以形成动态的过滤参数。

搜索的时候大概找到几种可用的方法,参考如下:

  1. ^((?:河|海岸|峡谷).)*$
SELECT *
FROM content_xx
WHERE content NOT REGEXP "(?:河|海岸|峡谷)"

  1. ^((?!河|海岸|峡谷).)*$
SELECT *
FROM content_xx
WHERE content REGEXP "^((?!河|海岸|峡谷).)*$"

  1. ^(.*(河|海岸|峡谷).*)$
SELECT *
FROM content_xx
WHERE content NOT REGEXP "^(.*(河|海岸|峡谷).*)$"

结果:

2	甘肃西北的干旱戈壁是珍稀植物隐居的乐土
4	喀斯特瀑布 繁星般点缀了 219国道滇桂段
6	柴达木水上雅丹 “西部千岛湖”的变化、秘密与隐忧
7	伟大的征途——布伦托海大迁徙

在这里插入图片描述

相关内容

热门资讯

同力股份:无人驾驶产品目前已完... 新京报贝壳财经讯(记者黄鑫宇)2025年12月26日晚,北交所上市公司陕西同力重工股份有限公司(即“...
新消费周报 | 淘宝闪购开通无... 《CBNData新消费周报》精选本周新消费领域最新动态,公司头条、消费风向、智能创新、营销动态、可持...
穿越波动的稳健之选:优质可转债... 作者:烟雨导语:在当下复杂多变的市场环境中,可转债因其"股债双性"的独特优势,成为投资者平衡风险与收...
6天4板!华联控股拟12.35... Arizaro项目LCE(碳酸锂当量)总资源量概要。 图源:华联控股公告本报记者 李贝贝 上海报道1...
触及重大违法行为,或将被退市!... 本文来源:时代周报 作者:林昀肖12月26日,*ST长药(300391.SZ)公告称,公司因涉嫌定期...
独家揭秘!新股未上市先套现,中... 暗盘交易的本质是一场对赌。“蘅东光每股190元买断”。近日,随着北交所新股蘅东光中签结果出炉,券商中...
科技富豪财富暴增:马斯克身价上... 2025年人工智能投资热潮推动了美国最富有的科技富豪净资产飙升。但随着市场对人工智能泡沫担忧的增长,...
马思唯献唱NBA名人赛 尼克杨... 近日,2025成都聚星名人赛在成都五粮液体育中心举行。现场,四川籍说唱歌手马思唯担任助演嘉宾,倾情现...
一家老牌VC决定申请破产 在一级市场中,风险投资机构主动申请破产实属罕见。但近日,一家美国老牌VC却做出了这一出人意料的决定。...
300391爆雷!连续三年财务... 本报(chinatimes.net.cn)记者帅可聪 北京报道“全仓进的,这回真不知道该怎么办了。”...