在SQL Server中查找最接近的日期

Max*_*ion 30 sql sql-server date

我有一个表dbo.XDateTime column Y可能有数以百计的记录.

我的存储过程有参数@CurrentDate,我想找出column Y上表dbo.X中小于和最接近的日期@CurrentDate.

怎么找到它?

ede*_*rbf 65

where子句将匹配日期小于@CurrentDate的所有行,并且由于它们是后续排序的,因此TOP 1将是与当前日期最接近的日期.

SELECT TOP 1 *
FROM x
WHERE x.date < @CurrentDate
ORDER BY x.date DESC
Run Code Online (Sandbox Code Playgroud)


Mik*_*use 13

使用DateDiff并按结果显示该日期与输入之间的天数或秒数

像这样的东西

    select top 1 rowId, dateCol, datediff(second, @CurrentDate, dateCol) as SecondsBetweenDates
    from myTable
    where dateCol < @currentDate
    order by datediff(second, @CurrentDate, dateCol)
Run Code Online (Sandbox Code Playgroud)

  • 在ORDER BY中,您可以按别名引用列(即,您可以`ORDER BY SecondsBetweenDate`).但是,您要按表达式而不是按列对行进行排序.这可能使查询不[sargable](http://en.wikipedia.org/wiki/Sargable"Sargable(Wikipedia)").只是一张纸条. (3认同)
  • 如果您不知道第一个日期是否小于或大于第二个日期,可能需要采用差异的绝对值“ABS”来处理负值。 (2认同)