1

我在表中有一个字段,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)

...但是那些没有用,他们给了我>今天的每一个活动的日期。但是,即使上述方法有效,它仍然很丑陋。

没有更好的方法吗?

4

2 回答 2

3

尝试:

WHERE e.EventDate >= cast(getdate() as date)

将 getdate() 转换为日期时间。这是 SQL Server 2008 中的一种简洁方式,可以去除 datetime 类型的时间部分。

于 2012-11-01T03:12:07.760 回答
0

使用 Shan Plourde 的方法肯定更干净、更快捷,但对于更一般的情况,当你想将 a 舍datetime入到特定的时间间隔时,我使用

dateadd(dd,datediff(dd,0,[datetime column]),0)

wheredd代表日,可以用mm(月)、hh(小时)、mi(分钟)等替换。

如果你想花哨和四舍五入,比如 15 分钟的间隔,你可以使用

dateadd(mi, 
        -datepart(mi,[datetime column])%15,
        dateadd(mi,datediff(mi,0,[datetime column]),0)
        )

%模运算符在哪里。如果您不使用平均划分 60 的间隔,您将得到古怪的结果。

于 2012-11-01T04:08:59.807 回答