Sql 查找字符串是否包含数字序列

Sql 查找字符串是否包含数字序列,sql,sql-server,Sql,Sql Server,我试图提出一个查询,可以确定字符串varchar中是否有一个由3个或更多数字组成的数字序列。这是针对SQL Server的 示例字符串:521324567 这一行数据将被返回,因为它的序列是4567 示例字符串:410747823 不会返回此行数据,因为没有3个或更多数字的序列 示例字符串:1274563619 这一行数据将被返回,因为它具有序列456 我想如果它是一个固定长度的字符串,我可能会找到类似于下面sql的东西 Select num from numbers where substri

我试图提出一个查询,可以确定字符串varchar中是否有一个由3个或更多数字组成的数字序列。这是针对SQL Server的

示例字符串:521324567 这一行数据将被返回,因为它的序列是4567

示例字符串:410747823 不会返回此行数据,因为没有3个或更多数字的序列

示例字符串:1274563619 这一行数据将被返回,因为它具有序列456

我想如果它是一个固定长度的字符串,我可能会找到类似于下面sql的东西

Select num from numbers where substring(num,2,1)=
(select substring(num,1,1)) + 1

只有7种可能的序列,因此:

select num
from numbers
where num like '%123%'
   or num like '%234%'
   or num like '%345%'
   or num like '%456%'
   or num like '%567%'
   or num like '%678%'
   or num like '%789%'

如果你数012,那么你也可以为它添加一个条件。

波希米亚是正确的,但这里有一个选择列表的变体:

select num, case when 
   num like '%012%'
   or num like '%123%'
   or num like '%234%'
   or num like '%345%'
   or num like '%456%'
   or num like '%567%'
   or num like '%678%'
   or num like '%789%'
   or num like '%890%'
   or num like '%901%' 
then 'Yep' else 'Nope' end as is_there_a_sequence
from numbers
我还添加了012和890。虽然901可能是一座太远的桥


我希望这有帮助。

试试这个。我知道这有点复杂。但它是动态的

DECLARE @MyNum NVARCHAR(50) = '1274563619'

;WITH CTE
AS
(
    SELECT
       SeqNo = 1,
       MyNum = @MyNum,
       PosNum = SUBSTRING(@MyNum,1,1)
    UNION ALL
    SELECT
       SeqNo = SeqNo +1,
       MyNum,
       PosNum = SUBSTRING(MyNum,SeqNo,1)
       FROM CTE
          WHERE SeqNo <= LEN(@MyNum)
)
SELECT
    MyNum
    FROM CTE C1
       WHERE EXISTS
       (
          SELECT 1 FROM CTE C2
             WHERE 
                (
                    C2.SeqNo = C1.SeqNo+1 
                    AND
                    C2.PosNum = C1.PosNum+1
                )
                OR
                (
                    C2.SeqNo = C1.SeqNo+2 
                    AND
                    C2.PosNum = C1.PosNum+2
                )
       )
       GROUP BY MyNum
          HAVING COUNT(1)>2

很好的逻辑,但仍然可以通过其他逻辑查询查看。仅访问行源一次+1。我很想知道charindex是否会导致执行的机器指令比我们想象的要少。例如,有些人似乎这么认为。@jeff我怀疑用charindex替代会产生显著的不同