我需要执行一个查询,其中要求日期值为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方法来获得确切的日期值?与前两种方法相比,有什么主要的缺点或差异吗?(除减去月份和年份外)。
发布于 2013-12-25 10:13:12
你最好使用DATEADD函数。
因为如果有一天您决定将列的日期类型从DATETIME或SMALLDATETIME更改为DATE,则会出现错误。
您不能从DATE中减去天数。您应该只使用DATEADD函数。
https://stackoverflow.com/questions/20771524
复制相似问题