SQL 重复字符串

SQL Repeating Character String

如果某个字段在单元格中有重复值,是否有方法对其求值。例如,如果某人按住一个数字键并且它 returns ‘00000’ 或 ‘222222222’ 或 ‘333’ 或类似的东西的一些变体,则该字段中的值只能是数字。我正在寻找一种方法来查询可能出现这种模式的字段。

以下查找模式,即 333...或 123...或 987...

把它想象成 Rummy 500... 3 人或更多人的跑步和团体。

Declare @Table table (col int)
Insert into @Table values
(4141243),(4290577),(98765432),(78635389),(4141243),(22222),(4290046),(55555555),(4141243),(6789),(77777),(45678),(4294461),(55555),(4141243),(5555)

Declare @Num table (Num int);Insert Into @Num values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)

Select Distinct A.*
  From @Table A
  Join (
        Select Patt=replicate(Num,3) from @Num
        Union All
        Select Patt=right('000'+cast((Num*100+Num*10+Num)+12 as varchar(5)),3) from @Num where Num<8
        Union All
        Select Patt=reverse(right('000'+cast((Num*100+Num*10+Num)+12 as varchar(5)),3)) from @Num where Num<8
       ) B on CharIndex(Patt,cast(col as varchar(25)))>0

Returns

col
5555
6789
22222
45678
55555
77777
55555555
98765432

现在,如果您不想识别 "runs" (123...)",只需删除以下内容:

    Union All
    Select Patt=right('000'+cast((Num*100+Num*10+Num)+12 as varchar(5)),3) from @Num where Num<8
    Union All
    Select Patt=reverse(right('000'+cast((Num*100+Num*10+Num)+12 as varchar(5)),3)) from @Num where Num<8

由于您只对完整的重复感兴趣,例如“3333”而不是“43333”,这很简单:查找长度超过一个字符的字符串,当您删除等于第一个字符的所有字符:

select *
from mytable 
where len(value) > 1 and len(replace(value, left(value,1), '')) = 0