Sql server 使用SQL Server 2014选择具有给定日期的单行
尝试编写使用给定日期返回id的SQL查询 如果该日期不在表中,则应返回与给定日期最近的日期 因此……如果输入日期是2016年1月2日,它将返回id 1,因为这是最接近的匹配 如果输入日期为2003年12月2日,则返回id 5--Edited-- 使用“abs”获取最接近的数字Sql server 使用SQL Server 2014选择具有给定日期的单行,sql-server,database,Sql Server,Database,尝试编写使用给定日期返回id的SQL查询 如果该日期不在表中,则应返回与给定日期最近的日期 因此……如果输入日期是2016年1月2日,它将返回id 1,因为这是最接近的匹配 如果输入日期为2003年12月2日,则返回id 5--Edited-- 使用“abs”获取最接近的数字 Table1 ___________________ id Date 1 2016/1/05 2 2012/5/09 3 2010/6/23 4 2009/7/18 5 200
Table1
___________________
id Date
1 2016/1/05
2 2012/5/09
3 2010/6/23
4 2009/7/18
5 2002/2/13
--编辑--
使用“abs”获取最接近的数字
Table1
___________________
id Date
1 2016/1/05
2 2012/5/09
3 2010/6/23
4 2009/7/18
5 2002/2/13
您可以尝试这样的伪代码
declare @t1 as table (id int,date datetime)
insert into @t1 select 1,'2016/1/05'
insert into @t1 select 2,'2012/5/09'
insert into @t1 select 3,'2010/6/23'
insert into @t1 select 4,'2009/7/18'
insert into @t1 select 5,'2002/2/13'
declare @inputDate datetime = '2003/2/12'
select top 1.id from @t1 order by abs(datediff(dd,date,@inputDate))
set @inputDate = '2016/1/02'
select top 1.id from @t1 order by abs(datediff(dd,date,@inputDate))
您可以尝试这样的伪代码
declare @t1 as table (id int,date datetime)
insert into @t1 select 1,'2016/1/05'
insert into @t1 select 2,'2012/5/09'
insert into @t1 select 3,'2010/6/23'
insert into @t1 select 4,'2009/7/18'
insert into @t1 select 5,'2002/2/13'
declare @inputDate datetime = '2003/2/12'
select top 1.id from @t1 order by abs(datediff(dd,date,@inputDate))
set @inputDate = '2016/1/02'
select top 1.id from @t1 order by abs(datediff(dd,date,@inputDate))
不起作用,最近的日期也可以更大。你必须得到两个日期,一个大一个小,然后比较这两个日期,看哪一个是最近的。不起作用,最近的日期也可以更大。你必须得到两个日期,一个大一个小,然后比较这两个日期,看哪一个是最近的。