将日期字段与GetDate的日期值进行比较的更简单的方法



我在表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的间隔,您将获得古怪的结果。

最新更新