在SQL查询中查找最多的起始字符

时间:2012-08-30 08:01:18

标签: sql sql-server

简化方案,我有一个包含以下字段/值的表:

ID  value
1   '12345'
2   '1234'
3   '123'
4   '12'
5   '1'

我想找到最接近A ='1230'的记录,它应对应于ID = 3.

我现在想到的唯一实现是基本的...使用循环来迭代子字符串并进行比较。 有没有更好的方法来解决这个问题?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

试试这个: -

Declare @valueToSearch int
Set @valueToSearch =1230

;WITH cte
AS
(
  SELECT ID,RANK() OVER(ORDER BY ABS(value-@valueToSearch)) AS num FROM Sample
)
SELECT   ID FROM cte
WHERE num=(SELECT MIN(num) FROM cte

这将得到2作为结果

Sql Fiddle

答案 1 :(得分:0)

declare @q varchar(5)
select @q = '1230'

select top 1 number, substring(source.value, 1, number)
from master.dbo.spt_values, source
where type='p'
and number<=len(source.value)
and substring(source.value, 1, number) = substring(@q, 1, number)
order by number desc

或使用喜欢......

select top 1 * from @source s
where @q like value +'%'
order by len(value) desc