2012-03-23 35 views
0

我有一个SQL数据计算,它被用作where子句的一部分来从计算日期在午夜获得预订。替代T-SQL在where条款的日期计算

我的解决办法:

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

原来是:

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

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

是否有替代性和更简单的方法来呢?

+1

哪个版本** ** SQL的服务器??在SQL Server 2008及更新的版本中,您可以使用仅包含日期的'DATE'数据类型 - 不涉及涉及的时间部分 – 2012-03-23 16:56:57

+1

它无关紧要,因为它只会计算一次,然后应用于每一行。 – 2012-03-23 17:34:12

+1

@KM。当然重要。即使没关系,也很重要。提问的人往往不能确定是否重要。 – 2012-03-25 14:16:04

回答

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)) 
0

下面还将为2005年的工作:

SELECT DATEADD(dd, -7, FLOOR(CAST(GETDATE() AS FLOAT))) 

这工作,因为SQL服务器(和窗口,为此事)存储日期作为浮点,与代表人数的整数的日期是01/01/1900,小数部分代表时间。以下是短,与我通常在这种情况下使用更加一致:由于不同数量的,如果你上过天以外的其他计算(即月,年)

SELECT FLOOR(CAST(GETDATE() AS FLOAT) -7) 

DATEADD是有用的,日期是每月或每年。在使用天数时,直接添加或减少通常更容易。同样,如果你想减,例如,从一个日期两个小时,你可以用:

SELECT CAST(GETDATE() AS FLOAT) * 2.0/24.0 
0

你也可以做这样的:

bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)