2016-07-29 73 views
1

我一直在看這個在最後一個小時,似乎無法找到一種方法來做到這一點,我敢肯定它很簡單,但我的谷歌和閱讀技巧失敗我。SQL Server - 查找號碼模式

我只需要在字段中找到升序和降序數字模式。

如在此僞SQL代碼:

select * where col = '123456' or '23456' or '7654' or '987654321' 

大多數使用LIKE模式的方法似乎是圍繞字符/數字,而不是特定的順序放置,

我已經開始嘗試創建一個查詢比接受第一個字符並將其與下一個字符進行比較,但這看起來效率低下且效率低下,因爲需要對列中的每個字段執行查詢並在匹配時將其返回。

我設法找到一個方法來獲得它,如果它是一個重複的字符,但不是如果它的增加或減少。

任何幫助將不勝感激。

+3

,你能否告訴樣本數據和所需輸出? –

+0

喜添, 這裏是一個小樣本,期望輸出 '4141243, 4290577, 98765432, 78635389, 4141243, 22222, 4290046, 55555555, 4141243, 6789, 77777, 45678, 4294461, 55555, 4141243, 5555' 所以從這個返回將是6789和98765432,沒有長度標準(比爲12個字符,但數量的可能的最大其他可以在1-12個字符之間) 編輯-sorry這就是有點眼睛看 – Litation

回答

0

另一種選擇可能是這樣的:

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 

**

想想甜酒500的組或3運行例如123或321或 333將是一個打擊。

**

+0

謝謝,我沒有機會嘗試這還不過,但它看起來很健全,並解決了我在一個解決方案中尋找的兩個規則。 – Litation

2

您可以在您的LIKE引號內放置正則表達式。 升序:

^(?=\d{4,10}$)1?2?3?4?5?6?7?8?9?0?$ 

降序:

^(?=\d{4,10}$)9?8?7?6?5?4?3?2?1?0?$ 

d {4,10}這裏是可能的值的長度,圖4個10碼元之間。
不會很快,很可能。

你可以檢查它是如何工作的http://rubular.com/

編輯:對不起,我忘了提及你將不得不先做一個MS SQL Server CLR集成。默認情況下,MSSQL Server不完全支持RegEx。

本文介紹如何創建和使用支持正則表達式的LIKE(Transact-SQL)子句的擴展。

http://www.codeproject.com/Articles/42764/Regular-Expressions-in-MS-SQL-Server

+0

嗨,謝謝我已經給它一個去,它不會返回任何結果,但它可能是我需要改變的東西因爲它使用正則表達式它不是我以前用過的自己,因爲我不認爲它在TSQL – Litation

+0

中支持。對不起,請閱讀我的編輯。 –

+0

完美的歡呼我會給它一個去。 – Litation