我有一个 SQL 数据计算,它用作 where 子句的一部分,以从午夜的计算日期获取预订。
我的解决方案:
bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))
原来是:
bookDate >= DATEADD(dd, -7, GETDATE())
但是它在计算日期+当前时间返回
有没有另一种更简单的方法来解决这个问题?
我有一个 SQL 数据计算,它用作 where 子句的一部分,以从午夜的计算日期获取预订。
我的解决方案:
bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))
原来是:
bookDate >= DATEADD(dd, -7, GETDATE())
但是它在计算日期+当前时间返回
有没有另一种更简单的方法来解决这个问题?
这有点简单。
bookDate >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()) - 7, 0)
在 SQL Server 2008 和 SQL Server 2012 中,您可以使用date
数据类型。
bookDate >= DATEADD(dd, -7, CAST(GETDATE() as DATE))
你也可以这样做:
bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)
以下内容也适用于 2005 年:
SELECT DATEADD(dd, -7, FLOOR(CAST(GETDATE() AS FLOAT)))
这是因为 SQL Server(和 windows,就此而言)将日期存储为浮点数,表示天数的整数是 01/01/1900,小数部分表示时间。以下内容更短,更符合我在这种情况下通常使用的内容:
SELECT FLOOR(CAST(GETDATE() AS FLOAT) -7)
如果您计算的不是天数(即月、年),DATEADD 很有用,因为每个给定的月或年的天数是不同的。在处理天数时,直接添加或减去通常更容易。同样,如果您想从日期中减去例如两个小时,您可以使用:
SELECT CAST(GETDATE() AS FLOAT) * 2.0/24.0