tSQL选择前3个月

时间:2015-04-15 20:27:26

标签: sql-server tsql

我不是一个sql人,并且已经成为一个人:\

我试图在没有当月的情况下获得前3个月的数据。

WHERE DATEPART(m, start_date) = DATEPART(m, DATEADD(m, -3, getdate())) 
 and DATEPART(yyyy, start_date) = DATEPART(yyyy, DATEADD(m, -3, getdate()))

这只能从1月份获得数据,我需要Jan-Mar。

WHERE start_date >= dateadd(mm,datediff(mm,0,getdate())-3,0)

这让我从1月1日开始 - 现在。

所以现在我卡住了,不知道该怎么做。 mssql ver:2012

提前感谢您的帮助。

6 个答案:

答案 0 :(得分:3)

WHERE DateColumn >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()) -3,0)
  AND DateColumn <  DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())   ,0)

这将返回2015-01-012015-03-31

之间的数据

答案 1 :(得分:1)

你可以试试这个:

Where datediff(mm, start_date, getdate()) in (1, 2, 3)

答案 2 :(得分:0)

这有帮助吗?:

WHERE start_date BETWEEN DATEADD(m, -3, getdate()) AND DATEADD(m, -1, getdate()) 

答案 3 :(得分:0)

您可以使用以下内容:

WHERE MONTH(start_date)>= MONTH(getdate())- 3 AND MONTH(start_date)< MONTH(getdate())

答案 4 :(得分:0)

您可以构建一个字符串并将其转换为日期......例如:

WHERE start_date >= dateadd(month,-3, convert(datetime,convert(varchar(10),Month(GETDATE())) + '/01/' + convert(varchar(10),Year(GETDATE()))))
    and start_date < convert(datetime,convert(varchar(10),Month(GETDATE())) + '/01/' + convert(varchar(10),Year(GETDATE())))

答案 5 :(得分:0)

SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,DATEADD(MONTH,-3,GETDATE())),0)  -- FIRST DAY OF MONTH, THREE MONTHS AGO
      ,DATEADD(MILLISECOND,-3,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) -- LAST DAY OF LAST MONTH