我需要执行一个查询,其中要求的日期值为current date(or specific date) - 7 days
。我遇到过很多像这样的解决方案,
(SELECT CONVERT(VARCHAR(10),DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), -7),120))
然而,为了获得一周的价值,我找到了here.
的类似解决方案SELECT CONVERT(varchar(25),PostDate,107) AS duration, count(*) AS posts
FROM MDBDetails
WHERE DATEDIFF(week, PostDate,GETDATE()) = 1
GROUP BY CONVERT(varchar(25),PostDate,107)
ORDER BY duration
但是,像GETDATE() -7
这样的简单查询或下面的代码似乎为我做了必要的工作。
DECLARE @Date DATETIME = '12/25/13'
SELECT @Date-7
我的问题是,上面用减去日期的方法不是一个好的做法吗?
当然我可以使用DATEDIFF
扩展来指定月份和年份。但是,上述方法是一个很好的做法吗?是否有必要仅使用DATEDIFF
方法来获取确切的日期值?与前两种方法相比,是否存在任何重大缺陷或差异? (减去月数和年数除外)。
答案 0 :(得分:3)
您最好使用DATEADD
功能。
因为如果有一天您决定将列的日期类型从DATETIME
或SMALLDATETIME
更改为DATE
,则会出现错误。
您无法从DATE
中减去天数。您只应使用DATEADD
功能。