22,300
社区成员




CREATE TABLE #
(id INT, kb INT)
INSERT INTO #
SELECT 1, 100 UNION ALL
SELECT 2, 120 UNION ALL
SELECT 3, 260 UNION ALL
SELECT 4, 480 UNION ALL
SELECT 5, 800
DECLARE @qty int
SET @qty=80
SELECT * FROM #
WHERE id IN
(
SELECT TOP 1 ID FROM # ORDER BY abs(kb-@qty)
)
SET @qty=130
SELECT * FROM #
WHERE id IN
(
SELECT TOP 1 ID FROM # ORDER BY abs(kb-@qty)
)
SET @qty=900
SELECT * FROM #
WHERE id IN
(
SELECT TOP 1 ID FROM # ORDER BY abs(kb-@qty)
)
/*
id kb
----------- -----------
1 100
(1 行受影响)
id kb
----------- -----------
2 120
(1 行受影响)
id kb
----------- -----------
5 800
(1 行受影响)
*/
select top 1 * from tb
order by abs(kb-@num)
create table tb(id int, kb int)
insert into tb values(1 ,100)
insert into tb values(2 ,120)
insert into tb values(3 ,260)
insert into tb values(4 ,480)
insert into tb values(5 ,800)
go
declare @kb as int
set @kb = 80
select * from tb where abs(kb-@kb) = (select min(abs(kb-@kb)) abs_kb from tb)
/*
id kb
----------- -----------
1 100
(所影响的行数为 1 行)
*/
set @kb = 130
select * from tb where abs(kb-@kb) = (select min(abs(kb-@kb)) abs_kb from tb)
/*
id kb
----------- -----------
2 120
(所影响的行数为 1 行)
*/
set @kb = 900
select * from tb where abs(kb-@kb) = (select min(abs(kb-@kb)) abs_kb from tb)
/*
id kb
----------- -----------
5 800
(所影响的行数为 1 行)
*/
drop table tb