MySQL POSIX正则需求:匹配指定串且排除指定串(无环视/重复操作符)
解决MySQL基础POSIX正则下的多条件匹配问题
你的核心问题是原SQL里的环视正则在仅支持基础POSIX正则的服务器上无法运行,需要实现必须包含所有指定子串、同时不包含任何排除子串的查询,且不能使用重复操作符。
可行方案:拆分多条件判断
由于基础POSIX正则不支持环视,无法用单个正则同时满足“多子串必存在+多子串必不存在”的逻辑,最直接的方法是把每个条件拆成单独的RLIKE/NOT RLIKE判断,用AND连接:
- 每个需要包含的子串:用
列名 RLIKE '子串' - 每个需要排除的子串:用
列名 NOT RLIKE '子串'
对应示例的SQL实现
结合你给出的示例字符串("The quick brown fox" 和 "A slow red fox"):
- '+qui +th -red'(匹配第一个,不匹配第二个):
SELECT ... WHERE itemTitle RLIKE 'qui' AND itemTitle RLIKE 'th' AND itemTitle NOT RLIKE 'red'
- '+fox +o'(匹配两个字符串):
SELECT ... WHERE itemTitle RLIKE 'fox' AND itemTitle RLIKE 'o'
- '+fox -q'(不匹配第一个,匹配第二个):
SELECT ... WHERE itemTitle RLIKE 'fox' AND itemTitle NOT RLIKE 'q'
- '+ow -fo'(两个都不匹配):
SELECT ... WHERE itemTitle RLIKE 'ow' AND itemTitle NOT RLIKE 'fo'
方案说明
这种方式完全依赖MySQL基础正则支持的RLIKE/NOT RLIKE语法,没有使用环视或重复操作符,能在仅支持POSIX基础正则的环境下正常运行,且逻辑清晰,完全符合你的需求。
内容的提问来源于stack exchange,提问作者URi613
相关产品推荐
相关产品推荐

