猿问

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

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


这些是我拥有的表格数据


记录 1 | 最后日期 2019/01/01 | 日期 2019/12/3


记录 2 | 最后日期 2019/12/01 | 日期 2019/12/3


例如,当我输入时,2019-05-1我应该得到记录 1,当我输入时,2019-12-05我应该得到记录 2。当我输入时,219-12-05我得到 2 条记录,这是错误的。


我创建了一条 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


侃侃无极
浏览 141回答 2
2回答

慕雪6442864

SELECT top 1 [date_from],[date_to]FROM [t_dates]&nbsp;WHERE @dateQuery between [date_from] AND [date_to]ORDER BY [date_to] desc,[date_from] desc

智慧大石

你不需要所有的变量。一个简单的 where 子句就足够了。SELECT *FROM [t_dates]WHERE Sartdate <= @dateQuery and EndDate >= @dateQuery这将返回您在和之间@dateQuery范围内的记录。我还假设您的帖子中有错字,但为了清楚起见,我将其保留在这里。SartdateEndDateSartdate
随时随地看视频慕课网APP
我要回答