过去 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 子句的主要内容,如果未能解决你的问题,请参考以下文章
使用具有一个条件的 WHERE 子句运行 100 个 SQL 查询,还是使用具有 100 个条件的 WHERE 子句的一个查询更好?