SQL中过滤重复两位数字模式超过3次的正则表达式实现
在SQL中过滤包含两位数字模式重复4次及以上的字符串
要实现你的需求——保留两位数字重复≤3次的字符串,过滤重复≥4次的,核心是用正则匹配出两位数字连续重复4次的模式,再反向筛选。
核心正则逻辑
使用正则表达式 (\d{2})\1{3},拆解如下:
(\d{2}):捕获任意两位数字作为匹配组\1:引用刚才捕获的两位数字{3}:要求该匹配组再重复3次,加上最初的1次,总共形成4次连续重复(比如12重复4次就是12121212)
各主流SQL数据库的实现代码
MySQL/MariaDB
利用REGEXP操作符,筛选不匹配目标模式的记录:
SELECT your_column FROM your_table WHERE your_column NOT REGEXP '([0-9]{2})\\1{3}';
注:MySQL中反向引用需要双写反斜杠转义,即
\\1
PostgreSQL
使用!~(不匹配正则)操作符:
SELECT your_column FROM your_table WHERE your_column !~ '(\d{2})\1{3}';
SQL Server
SQL Server的LIKE不支持反向引用,改用PATINDEX函数判断是否存在匹配模式,返回0表示无匹配:
SELECT your_column FROM your_table WHERE PATINDEX('%([0-9][0-9])\1\1\1%', your_column) = 0;
验证示例
测试以下数据时,结果符合预期:
121212:保留(仅3次重复)12121212:过滤(4次重复)99999999:过滤(99重复4次)56785678:保留(仅2次重复)
内容的提问来源于stack exchange,提问作者Muhamad Imannulhakim
相关产品推荐
相关产品推荐

