我想在SQL Server中搜索数字格式“abcabc”
结果可以是:324324,567567,...
我能做到吗?什么是解决方案?请帮助我,谢谢!
答案 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)