替代T-SQL的where子句的日期计算

时间:2012-03-23 16:54:19

标签: sql sql-server tsql calculated-field

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

我的解决方案:

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

原作是:

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

然而,它在计算日期+当前时间返回

是否有另一种更简单的方法?

3 个答案:

答案 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)