在SQL中获取特定日期值

时间:2013-12-25 10:05:18

标签: sql sql-server date

我需要执行一个查询,其中要求的日期值为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方法来获取确切的日期值?与前两种方法相比,是否存在任何重大缺陷或差异? (减去月数和年数除外)。

1 个答案:

答案 0 :(得分:3)

您最好使用DATEADD功能。

因为如果有一天您决定将列的日期类型从DATETIMESMALLDATETIME更改为DATE,则会出现错误。

您无法从DATE中减去天数。您只应使用DATEADD功能。