过去 13 个完整月的 SQL WHERE 子句

Posted

技术标签:

【中文标题】过去 13 个完整月的 SQL WHERE 子句【英文标题】:Last 13 full months SQL WHERE clause 【发布时间】: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 日返回。

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

谢谢!

约翰

【问题讨论】:

【参考方案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()))

【讨论】:

以上是关于过去 13 个完整月的 SQL WHERE 子句的主要内容,如果未能解决你的问题,请参考以下文章

SQL WHERE 子句类似于 JOIN 查询

SQL - 按日期和年份求和

从当前日期回溯 24 个月的 where 子句存在问题

使用具有一个条件的 WHERE 子句运行 100 个 SQL 查询,还是使用具有 100 个条件的 WHERE 子句的一个查询更好?

SQL查询where子句太长

在 where 子句中从当前日期减去 30 天