【问题标题】:Last 13 full months SQL WHERE clause过去 13 个完整月的 SQL WHERE 子句
【发布时间】:2015-01-30 17:02:27
【问题描述】:

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

我想要的是 where 子句捕获过去 13 个月的完整数据。

例子:

  • 今天是 2015 年 1 月 30 日,如果执行该查询将返回从 2013 年 12 月 1 日到 2014 年 12 月 31 日的记录。
  • 今天是 2/06/2015,如果执行查询将返回从 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 日返回。

对于解决此问题的任何帮助,我将不胜感激。

谢谢!

约翰

【问题讨论】:

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


    【解决方案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()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多