我在表Event.EventDate
中有一个字段,它是数据类型DATE
而不是DATETIME
,然后我的视图具有以下WHERE
子句:
WHERE e.EventDate >= CAST(CONVERT(VARCHAR(MAX), GETDATE(), 101) AS DATETIME)
您可以看到,我只是想获得所有事件>=
今天的 date 。以上代码有效,但这很难。我尝试了...
WHERE e.EventDate >= CONVERT(VARCHAR(MAX), GETDATE(), 101)
...和这个...
WHERE e.EventDate >= CONVERT(DATETIME, GETDATE(), 101)
...但是那些没有起作用,他们给了我每个事件>
今天的 date 。但是,即使上述工作也很丑陋。
没有更好的方法吗?
尝试:
WHERE e.EventDate >= cast(getdate() as date)
将getDate()施加到日期时间。这是SQL Server 2008中的一种干净的方法,并剥离了DateTime类型的时间部分。
使用shan plourde的方法肯定更清洁,更快,但是对于更普遍的情况,当您想将 datetime
绕到特定的时间间隔时,我使用
dateadd(dd,datediff(dd,0,[datetime column]),0)
dd
代表一天的位置,可以用mm
(月),hh
(小时),mi
(分钟)以及可能的其他可能代替。
如果您想花哨的时间,例如15分钟的间隔,则可以使用
dateadd(mi,
-datepart(mi,[datetime column])%15,
dateadd(mi,datediff(mi,0,[datetime column]),0)
)
其中 %
是模量运算符。如果您不使用均匀分配60的间隔,您将获得古怪的结果。