我有一个查询,我认为我已经破解了返回开始日期在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个月之前,到达今天的确切日期,并且不会回到月初或完成结束月份。请问你能告诉我哪里出错了。我确信这是非常简单的事情,但我认为我现在已经失明了。
答案 0 :(得分:1)
您可以使用DateAdd
和DateDiff
来获取该月的第一天,如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天添加到上个月的月末