You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL SELECT查询如何排除指定列含N个连续重复字符的行

正确实现方案

问题根因

你原来的写法存在两个核心问题:

  • 正则匹配逻辑错误:(.)\1{5,}匹配的是至少6个连续相同字符,而你要求的是存在5个连续就排除,匹配阈值设置错误
  • 反斜杠转义问题:多数SQL环境下反斜杠本身就是转义字符,直接写\1会被解析为转义序列而非反向引用,需要双写反斜杠生效

通用正则逻辑

要匹配「存在N个连续重复字符」,正则通用格式为(.)\\1{N-1,},你这里N=5,对应正则就是(.)\\1{4,}

不同数据库的实现写法

MySQL/MariaDB

SELECT * FROM mytable WHERE NOT (mycolumn REGEXP '(.)\\1{4,}');

如果是MySQL 8.0+开启了NO_BACKSLASH_ESCAPES的sql_mode,不需要额外转义反斜杠:

SELECT * FROM mytable WHERE NOT (mycolumn REGEXP '(.)\1{4,}');

PostgreSQL

PostgreSQL用~操作符做正则匹配,反向引用不需要额外转义:

SELECT * FROM mytable WHERE NOT (mycolumn ~ '(.)\1{4,}');

SQL Server 2017+

SELECT * FROM mytable WHERE NOT REGEXP_LIKE(mycolumn, '(.)\1{4,}');

匹配效果验证

上述写法可以完全符合你的示例要求:

  • 排除行:'0000011114BR13471'(前5个0连续)、'554XXXXXXXXXXXXXX'(多个X连续)、'000111114BR134716'(5个1连续)等所有存在5个及以上连续重复字符的行
  • 保留行:'000011114BR134716'(最多4个0/4个1连续)、'12345678901200001'(最多4个0连续)等无5个连续重复字符的行

内容的提问来源于stack exchange,提问作者Vojtech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 17:54:03