簡略化されたシナリオでは、次のフィールド/値を持つテーブルがあります。
ID value
1 '12345'
2 '1234'
3 '123'
4 '12'
5 '1'
A = '1230'に最も近いレコードを見つけたいのですが、ID=3に対応している必要があります。
私が今考えている唯一の実装は基本です...ループを使用してサブストリングを反復処理し、比較を行います。これを解決するためのより良い方法はありますか?
あなたの助けに感謝します
簡略化されたシナリオでは、次のフィールド/値を持つテーブルがあります。
ID value
1 '12345'
2 '1234'
3 '123'
4 '12'
5 '1'
A = '1230'に最も近いレコードを見つけたいのですが、ID=3に対応している必要があります。
私が今考えている唯一の実装は基本です...ループを使用してサブストリングを反復処理し、比較を行います。これを解決するためのより良い方法はありますか?
あなたの助けに感謝します
これを試して :-
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が得られます
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