日期在18到9个月之前,但从相关月份的开始到结束

时间:2015-09-17 08:20:09

标签: sql-server date sql-server-2008-r2

我有一个查询,我认为我已经破解了返回开始日期在18到9个月之前的所有记录但是我想要从18个月前的月份开始的所有记录和所有的记录9个月前的月份到月末的记录以及之间的记录。 目前我的WHERE子句包含:

WHERE startdate BETWEEN 
DATEADD(DAY, - (DAY(DATEADD(MONTH, 1, GETDATE())) - 18), DATEADD(MONTH, - 18, GETDATE())) 
AND DATEADD(DAY, - (DAY(DATEADD(MONTH, 1, GETDATE())) - 9), DATEADD(MONTH, - 9, GETDATE())

但是它将所有记录的开始日期在18到9个月之前,到达今天的确切日期,并且不会回到月初或完成结束月份。请问你能告诉我哪里出错了。我确信这是非常简单的事情,但我认为我现在已经失明了。

2 个答案:

答案 0 :(得分:1)

您可以使用DateAddDateDiff来获取该月的第一天,如this answer所示。

从这里做这样的事情相当简单:

WHERE StartDate >= DATEADD(month, -18, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))
AND StartDate < DATEADD(month, -8, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))

答案 1 :(得分:-1)

您可以使用新的SQL EMONTH() end of month function

月份的第一天,您可以将1天添加到上个月的月末