如何正确简化SQL多LIKE条件查询?避免非预期匹配结果
正确简化多前缀LIKE条件的SQL方案
你之前的写法出错的核心原因是:SQL的LIKE语法中,[]仅用于匹配单个字符的集合,而非多字符的前缀组。TT[AD,AG,AW,E,K]%实际会匹配TT后紧跟A/D/,/G/W/E/K中任意一个字符的内容,这才导致了TTAK、TTEK这类非预期结果。
以下是几种正确的简化方案:
方案1:保留OR逻辑,优化格式
如果数据库不支持正则,这是最稳妥的写法,仅做格式上的紧凑优化:
WHERE code LIKE 'TTAD%' OR code LIKE 'TTAG%' OR code LIKE 'TTAW%' OR code LIKE 'TTE%' OR code LIKE 'TTK%'
方案2:使用正则表达式匹配(适用于支持正则的数据库)
不同数据库的正则语法略有差异:
- MySQL/MariaDB:使用
REGEXP或RLIKEWHERE code REGEXP '^TT(AD|AG|AW|E|K)' - PostgreSQL:使用
~操作符WHERE code ~ '^TT(AD|AG|AW|E|K)' - SQL Server:使用
PATINDEX函数(2016+支持正则风格匹配)WHERE PATINDEX('TT(AD|AG|AW|E|K)%', code) > 0
方案3:结合LEFT函数与IN子句
针对不同长度的前缀拆分判断,若code字段有前缀索引,该方法更易触发索引优化:
WHERE (LEFT(code, 4) IN ('TTAD', 'TTAG', 'TTAW')) OR (LEFT(code, 3) IN ('TTE', 'TTK'))
内容的提问来源于stack exchange,提问作者dorsa
相关产品推荐
相关产品推荐

