0

我有一个 SQL 数据计算,它用作 where 子句的一部分,以从午夜的计算日期获取预订。

我的解决方案:

bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))

原来是:

bookDate >= DATEADD(dd, -7, GETDATE())

但是它在计算日期+当前时间返回

有没有另一种更简单的方法来解决这个问题?

4

3 回答 3

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))
于 2012-03-23T17:01:08.163 回答
0

你也可以这样做:

bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)
于 2012-03-26T07:15:42.653 回答
0

以下内容也适用于 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
于 2012-03-26T06:12:13.827 回答