检索交叉日期之间的特定日期SQL Server

时间:2018-12-18 13:56:36

标签: c# sql-server

我有日期表,当用户输入日期时,我想获得具有正确值范围的单个记录。问题在于日期范围相交。

这些是我拥有的表格数据

  

记录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

2 个答案:

答案 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处于SartdateEndDate之间的范围中。我还假设Sartdate是您的帖子中的错字,但是为了清楚起见,我将其保留在这里。