SQL重复字符串

时间:2016-08-09 19:07:54

标签: sql string ssms

如果字段在单元格中有重复值,是否有办法对其进行求值。例如,如果有人按住数字键并返回“00000”或“222222222”或“333”或某种类型的某些变体,则该字段中的值只能是数字。我正在寻找一种方法来查询可能出现这种模式的字段。

3 个答案:

答案 0 :(得分:0)

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

把它想象成拉米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

返回

col
5555
6789
22222
45678
55555
77777
55555555
98765432

现在,如果您不关心识别“运行”(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

答案 1 :(得分:0)

您可以在一个案例陈述中执行此操作

select val, 
(case when len(val) > 1 and len(replace(val,left(val,1),'')) = 0 then 'Yes' else 'No' end) as repeating_characters
from (values 
('00000'),
('222222222'),
('333'),
('11211')
) as q(val);

给出:

val        repeating_characters
---------  --------------------
00000      Yes
222222222  Yes
333        Yes
11211      No

首先检查值的长度是否大于1.如果是,则不是空字符串或只是一个字符。

然后取第一个字符,并在值中没有任何内容替换所有字符 如果剩余的长度大于0,那么有超过1种字符。

答案 2 :(得分:0)

因为您只对完整的重复感兴趣,例如&#33; 3333&#39;而不是,比如,&#39; 43333&#39;,这很简单:找到长于一个字符的字符串,当你删除所有与第一个字符相等的字符时,你会得到一个空字符串:

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