我有一个SQL数据计算,它被用作where子句的一部分来从计算日期在午夜获得预订。替代T-SQL在where条款的日期计算
我的解决办法:
bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))
原来是:
bookDate >= DATEADD(dd, -7, GETDATE())
但是它在返回计算的日期+当前时间
是否有替代性和更简单的方法来呢?
我有一个SQL数据计算,它被用作where子句的一部分来从计算日期在午夜获得预订。替代T-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))
下面还将为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
你也可以做这样的:
bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)
哪个版本** ** SQL的服务器??在SQL Server 2008及更新的版本中,您可以使用仅包含日期的'DATE'数据类型 - 不涉及涉及的时间部分 – 2012-03-23 16:56:57
它无关紧要,因为它只会计算一次,然后应用于每一行。 – 2012-03-23 17:34:12
@KM。当然重要。即使没关系,也很重要。提问的人往往不能确定是否重要。 – 2012-03-25 14:16:04