我在表Event.EventDate
中有一个字段,它的数据类型为DATE
,而不是DATETIME
,然后我有一个包含以下WHERE
子句的视图:
WHERE e.EventDate >= CAST(CONVERT(VARCHAR(MAX), GETDATE(), 101) AS DATETIME)
正如您所看到的,我只想尝试所有事件>=
今天的日期。上面的代码有效,但很难看。我试过这个......
WHERE e.EventDate >= CONVERT(VARCHAR(MAX), GETDATE(), 101)
......而这......
WHERE e.EventDate >= CONVERT(DATETIME, GETDATE(), 101)
...但是那些没有用,他们给了我每个事件>
今天的日期。但是,即使上述工作有效,它仍然很难看。
有没有更好的方法?
答案 0 :(得分:3)
尝试:
WHERE e.EventDate >= cast(getdate() as date)
将getdate()强制转换为日期时间。它在SQL Server 2008中是一种干净的方式,最终会删除日期时间类型的时间部分。
答案 1 :(得分:0)
使用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的间隔,你会得到古怪的结果。