将DATE字段与GETDATE的日期值进行比较的更简单方法是什么?

时间:2012-11-01 03:04:54

标签: sql sql-server sql-server-2008 tsql

我在表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)

...但是那些没有用,他们给了我每个事件>今天的日期。但是,即使上述工作有效,它仍然很难看。

有没有更好的方法?

2 个答案:

答案 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的间隔,你会得到古怪的结果。