SQL Server搜索数字格式“ABCABC”

时间:2013-12-12 02:26:15

标签: sql-server

我想在SQL Server中搜索数字格式“abcabc”

结果可以是:324324,567567,...

我能做到吗?什么是解决方案?

请帮助我,谢谢!

2 个答案:

答案 0 :(得分:4)

<强> 1。在简单的情况下,其中假定一个值存储为整数并且在[100,000; 999,999]的范围内,您可以只比较Value / 1000的结果(这将是一个整数除法,因为两个操作数是完整的),结果为Value % 1000。该查询将显示为like this

SELECT Value
FROM dbo.atable
WHERE Value / 1000 = Value % 1000
;

<强> 2。如果值可以大于999,999并且您想确定其十进制表示是否包含与任何位置的ABCABC模式匹配的数字序列,您可以先生成一个列出每个项目是初始值除以10的幂的结果,功率从0开始并且只要商等于或大于100,000就继续。为了举例说明,将为数字123,456,789生成以下列表:

123456789
12345678
1234567
123456

接下来,对于每个项目,您会找到Item % 1000000的结果,这将是一个位数不超过6的值。

最后,您将在第一种情况下应用获得的结果,即Result / 1000 = Result % 1000。可以找到这种匹配的值将包含在输出中。

要在Transact-SQL中对上述所有代码进行编码,我会使用包含0的{​​{3}}并使用numbers table

SELECT Value
FROM dbo.atable AS t
WHERE EXISTS (
  SELECT *
  FROM dbo.Numbers AS n
  CROSS APPLY (SELECT t.Value / POWER(CAST(10 AS bigint), n.Number)) AS i (Item)
  CROSS APPLY (SELECT i.Item % 1000000) AS r (Result)
  WHERE n.Number BETWEEN 0 AND 13  -- 13 is enough to cover the range of a bigint
    AND i.Item >= 100000
    AND r.Result / 1000 = r.Result % 1000
);

答案 1 :(得分:0)

试试这个

declare @t table (i int)

insert into @t values (123456),(123654),(0),(null)

select i
from @t
where SUBSTRING(cast(i as varchar),1,1)+1=SUBSTRING(CAST(i as varchar),2,1)
        and SUBSTRING(cast(i as varchar),2,1)+1=SUBSTRING(CAST(i as varchar),3,1)
        and SUBSTRING(cast(i as varchar),4,1)+1=SUBSTRING(CAST(i as varchar),5,1)
        and SUBSTRING(cast(i as varchar),5,1)+1=SUBSTRING(CAST(i as varchar),6,1)