Sql查询以查找最开始的字符

Sql查询以查找最开始的字符,sql,sql-server,Sql,Sql Server,简化的场景中,我有一个包含以下字段/值的表: ID value 1 '12345' 2 '1234' 3 '123' 4 '12' 5 '1' 我想找到最接近A='1230'的记录,它应该对应于ID=3 我现在想到的唯一实现是基本的。。。使用循环遍历子字符串并进行比较。 有没有更好的办法解决这个问题 将感谢您的帮助尝试以下方法:- declare @q varchar(5) select @q = '1230' select top 1 number, substrin

简化的场景中,我有一个包含以下字段/值的表:

ID  value
1   '12345'
2   '1234'
3   '123'
4   '12'
5   '1'
我想找到最接近A='1230'的记录,它应该对应于ID=3

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

将感谢您的帮助

尝试以下方法:-

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
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作为结果


为什么它不能对应于id=2?请定义“最接近”。id=2适用于值=1234%,但不适用于值12345%。。。只是一个requirementExcept a)它只适用于数字,b)他想要的答案是3。我怀疑a):如果我在over子句中将变量声明为varchar并将其转换回int,它甚至适用于字符串。b)我只是把这个问题理解为最接近上面所写的查询。我的错误我将更新我的答案你不能在“ABC”上做ABS!:)我想他指的是数字rit??无论如何,你的解决方案是好的。。!感谢您的建议@praveen,podiluska的解决方案奏效了
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