如何确定最近的日期

时间:2011-07-06 17:27:15

标签: c# .net sql sql-server razor

我对确定与DateTime.Now最接近的日期的最佳方式有何不同或有何疑问。

在我的表格中,所有内容都需要加上时间戳。在页面上,只有当日期是到目前为止最近的日期时,我才能从表中检索所有内容。

我该怎么做?

我在将日期插入数据库时​​使用DateTime.Now,格式如下:

5/07/2011 5:28:57 PM

5 个答案:

答案 0 :(得分:3)

这是我的建议:

declare @DateTimeNow datetime = getdate()

select TOP (1)
     RecordId
    ,MyDateColumn
    ,abs(datediff(s, MyDateColumn, @DateTimeNow)) as Diff
from 
    MyTable
order by 
    abs(datediff(s, MyDateColumn, @DateTimeNow)) asc

忘记使用ABS()!

答案 1 :(得分:1)

您是否只有过去的日期,这意味着,您的日期是否比DateTime.Now更新?如果没有,您可以在日期列上选择最新日期时使用简单的Order By。否则,您需要获得DateTime.Now之间的日期差异,并按该结果排序。 e.g。

SELECT TOP 1
   columnDate
FROM table1
ORDER BY DATEDIFF (ss,@passedInDate,columnDate)

这基本上会使用@passedInDate(DateTime.Now)作为限定符基准日期来查找所有未来和过去的日期。在我的示例中,我使用秒作为比较的时间间隔,但您可以将其更改为对您最有意义的任何内容。

此外,您不需要将DateTime.Now传递给SQL服务器,因为您可以使用内置的GetDate()函数。

答案 2 :(得分:1)

怎么样

SELECT TOP 1 *
FROM MyTable
ORDER BY TimestampColumn DESC

考虑将时间存储在 UTC - DateTime.UtcNow

答案 3 :(得分:1)

在T-SQL中,您可以使用DateDiff:

DATEDIFF ( datepart , startdate , enddate )

http://msdn.microsoft.com/en-us/library/ms189794.aspx

或在C#中你可以使用TimeSpan:

http://msdn.microsoft.com/en-us/library/system.timespan.aspx#Y3719

答案 4 :(得分:1)

这样的事情应该有效:

SELECT TOP 1 * FROM MyTable ORDER BY ABS(DATEDIFF(DD, getdate(), DATE))

这应该按最近的日期,过去或将来对行进行排序。如果您需要更精确的天数,请将DD更改为其他内容,如指定的here