我对确定与DateTime.Now
最接近的日期的最佳方式有何不同或有何疑问。
在我的表格中,所有内容都需要加上时间戳。在页面上,只有当日期是到目前为止最近的日期时,我才能从表中检索所有内容。
我该怎么做?
我在将日期插入数据库时使用DateTime.Now
,格式如下:
5/07/2011 5:28:57 PM
答案 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