最近13个月的SQL WHERE子句

时间:2015-01-30 17:02:28

标签: sql date where-clause sql-server-2014

我有一个数据库,其中包含一个日期列,可以在创建新的“联系人”时记录。当呼叫中心收到新的呼叫或电子邮件时,将生成联系人。

我想要的是where子句来捕获最近13个月的完整数据。

示例:

  • 今天是2015年1月30日,如果执行,查询将返回从2013年12月1日到2014年12月31日的记录。
  • 今天是2015年6月2日,如果执行该查询将返回2014年1月1日至2015年1月31日的记录。
  • 查询将包含当月第一天和最后一天的日期。

我的代码如下:

WHERE 
   dbo.ub_contact.contact_dt BETWEEN DATEADD(year, -1, (DATEADD(month, DATEDIFF(month, -1, getdate()) - 1, -1) + 1)) 
                             AND DATEADD(month, DATEDIFF(month, -1, getdate()) - 1, -1)

今天(2015年1月30日)此代码似乎将于2014年1月1日 - 2014年12月31日返回。

我很感激为解决这个问题提供帮助。

谢谢!

约翰

1 个答案:

答案 0 :(得分:1)

使用此日期:

SELECT EOMONTH(DATEADD(mm, -1, GETDATE()))
SELECT DATEADD(dd, 1, EOMONTH(DATEADD(mm, -14, GETDATE())))

所以你的where子句会是这样的:

WHERE dbo.ub_contact.contact_dt BETWEEN DATEADD(dd, 1, EOMONTH(DATEADD(mm, -14, GETDATE()))) AND EOMONTH(DATEADD(mm, -1, GETDATE()))