如何在SQL Server中查找由重复单字符组成的编号列数据
SQL Server 匹配特定重复字符规则的解决方案
SQL Server 的 LIKE 运算符不支持你使用的 Perl 风格正则表达式(像 ^、()、\1 这类语法都无法生效),它仅支持有限的通配符(%、_、[]、[^])。针对你要查找由单个字母/数字重复至少两次组成的字符串的需求,提供几个可行方案:
方案一:用 PATINDEX 实现匹配
SELECT * FROM Table1 WHERE -- 确保字符串长度至少为2,且首字符是字母/数字 PATINDEX('[0-9a-z][0-9a-z]%', column_A) = 1 -- 确保字符串中没有与首字符不同的字符 AND PATINDEX('%[^' + LEFT(column_A, 1) + ']%', column_A) = 0
方案二:SQL Server 2017+ 简化写法
如果你的 SQL Server 版本是2017及以上,用 REPLICATE 函数生成对比字符串,逻辑更直观:
SELECT * FROM Table1 WHERE LEN(column_A) >= 2 AND LEFT(column_A, 1) LIKE '[0-9a-z]' -- 验证整个字符串都是首字符的重复 AND column_A = REPLICATE(LEFT(column_A, 1), LEN(column_A))
补充:匹配含连续重复字符的字符串
如果你的需求是“字符串中存在至少一处连续重复字符”(比如 "aab"、"1223" 这类),SQL Server 2016及以上版本(兼容性级别设为130+)可以用这个写法:
SELECT * FROM Table1 WHERE PATINDEX('%([0-9a-z])\1%', column_A) > 0
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

