我有日期表,当用户输入日期时,我想获得具有正确值范围的单个记录。问题在于日期范围相交。
这些是我拥有的表格数据
记录1 |星期六2019/01/01 |截止日期2019/12/31
记录2 |星期六2019/12/01 |截止日期2019/12/31
例如,当我输入2019-05-1
时,我应该得到记录1;而当我输入2019-12-05
时,我应该得到记录2。当我输入219-12-05
时,我得到2条记录,这是错误的。 / p>
我创建了一条SQL语句,但是每次都会得到错误的值,而且我不知道如何解决
declare @currentrow int = 0
set @dateQuery = '2018-04-01'
select @count = count(*) from [dbo].[t_dates]
while @currentrow < @count
begin
select @dateFrom = [date_from], @dateTo = [date_to]
from [t_dates]
where date_id = @currentrow + 1
select @dateId = date_id
from [dbo].[t_dates]
where ((@dateQuery between @dateFrom and @dateTo))
print @dateId
print @dateFrom
print @dateTo
set @currentrow = @currentrow + 1
end
答案 0 :(得分:2)
SELECT top 1 [date_from],[date_to]
FROM [t_dates]
WHERE @dateQuery between [date_from] AND [date_to]
ORDER BY [date_to] desc,[date_from] desc
答案 1 :(得分:1)
您不需要所有变量。一个简单的where子句就足够了。
SELECT *
FROM [t_dates]
WHERE Sartdate <= @dateQuery and EndDate >= @dateQuery
这将返回记录,其中您的@dateQuery
处于Sartdate
和EndDate
之间的范围中。我还假设Sartdate
是您的帖子中的错字,但是为了清楚起见,我将其保留在这里。