如何用SQL高效定位含连续三个相同字母的字符串?
高效定位SQL表中含连续三个相同字母的字符串的方法
当然有更简洁高效的写法,核心是利用正则表达式替代冗长的OR条件,不同主流数据库的实现语法略有差异,下面分别举例:
MySQL/MariaDB
使用REGEXP(或RLIKE)操作符,正则表达式可直接匹配任意字母连续出现三次的情况。如果需要不区分大小写,可通过(?i)标记实现,或者结合UPPER()函数统一转换后匹配:
-- 支持(?i)标记的不区分大小写写法 SELECT * FROM your_table WHERE your_field REGEXP '(?i)([a-z])\\1\\1'; -- 兼容所有版本的不区分大小写写法 SELECT * FROM your_table WHERE UPPER(your_field) REGEXP '([A-Z])\\1\\1';
PostgreSQL
使用~*操作符实现不区分大小写的正则匹配,语法更简洁:
SELECT * FROM your_table WHERE your_field ~* '([a-z])\1\1';
SQL Server
使用PATINDEX函数结合正则逻辑,基础写法如下:
SELECT * FROM your_table WHERE PATINDEX('%([A-Z])\1\1%', UPPER(your_field)) > 0;
为什么这种写法更好?
- 代码简洁易维护:无需编写26个重复的
LIKE条件,修改匹配规则只需调整正则表达式即可 - 性能更优:多数数据库对正则表达式的执行优化优于多个
OR拼接的LIKE语句(注意:%xxx%前缀通配符无法利用字段索引,若要极致性能可考虑全文索引,但正则写法本身已比原写法高效)
内容的提问来源于stack exchange,提问作者Isaac A
相关产品推荐
相关产品推荐

