2016-08-09 17 views
0

セル内で値が繰り返されるフィールドを評価する方法はありますか?たとえば、誰かが数字キーを押さえていて、「00000」や「222222222」や「333」などのバリエーションを返す場合、値はこのフィールドでのみ数値にすることができます。私は、このようなパターンが発生する可能性があるフィールドで照会する方法を探しています。SQLを繰り返す文字列

答えて

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 
0

することができます1つのケースの文でこれを行う

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より大きいかどうかをチェックします。値が1より大きい場合は、空の文字列または1文字だけをチェックします。

その後、最初の文字を取り出し、その文字のすべてを値に置き換えません。
残りの長さが0より大きい場合、1種類以上の文字があります。

0

「3333」や「43333」のような完全なリピートだけに興味があるので、これはむしろ単純です。1文字よりも長い文字列を探します。最初の文字と等しいすべての文字を削除します。

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

あまりにも遅く、わずか2分です。 LukStormsはちょうど同じ答えを与えました。 –

+0

申し訳ありません。私にも起こった。 – LukStorms

関連する問題