在具有转移日期的条款的日期之间

时间:2013-12-18 16:15:35

标签: sql sql-server date between

是否可以在SQL中执行以下操作。我想编写一个代码,它将在某些日期之间返回记录,但会在报表运行时自动更新。例如:

12月18日我想将记录从11-1回到11/18和12/1到12/18,所以我可以在报告中逐月比较这些记录。

我明白我能做到:

WHERE
[database] BETWEEN '2013-11-01' and DATEADD(Month, 1, getdate ())) 
and not [database] IN ('2013-11-19 and '2013-11-30')

但是我必须每天进入查询以更新之间。我想这样做,以便我可以在任何一天运行查询并获取上个月的记录,直到本月的日期匹配。我目前一直在努力:

B.[datepaid] between DATEADD(Month, -1, getdate() ) 
and  DATEADD(MONTH, 1,  getdate() ))

但它将从11月返回所有记录。

1 个答案:

答案 0 :(得分:0)

我会推荐against using BETWEEN with Dates,因为它会产生一些意想不到的结果。但在您的情况下,您可以使用:

WHERE ([Date] >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()) - 1, '19000101')
AND [Date] < DATEADD(MONTH, -1, GETDATE()))
OR ([Date] >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
AND [Date] < GETDATE());

<强> Demo on SQL Fiddle