2016-07-29 45 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