我有一个SQL数据计算,它用作where子句的一部分,用于从午夜的计算日期开始预订。
我的解决方案:
bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))
原作是:
bookDate >= DATEADD(dd, -7, GETDATE())
然而,它在计算日期+当前时间返回
是否有另一种更简单的方法?
答案 0 :(得分:1)
这有点简单。
bookDate >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()) - 7, 0)
在SQL Server 2008和SQL Server 2012中,您可以使用date
数据类型。
bookDate >= DATEADD(dd, -7, CAST(GETDATE() as DATE))
答案 1 :(得分:0)
以下内容也适用于2005年:
SELECT DATEADD(dd, -7, FLOOR(CAST(GETDATE() AS FLOAT)))
这是有效的,因为SQL Server(和窗口,就此而言)将日期存储为浮点,整数代表天数为01/01/1900,分数部分代表时间。以下内容较短,与我在这种情况下通常使用的内容更为一致:
SELECT FLOOR(CAST(GETDATE() AS FLOAT) -7)
如果您计算的是除日期(即月,年)以外的其他内容,则DATEADD非常有用,因为每个月或每年都会有不同的天数。使用天数时,通常更容易直接添加或减去。同样,如果您想从日期中减去两个小时,则可以使用:
SELECT CAST(GETDATE() AS FLOAT) * 2.0/24.0
答案 2 :(得分:0)
你也可以这样做:
bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)