我有一系列日期,范围从2015-06到2013-04。随着我输入更多数据,日期范围将会增加。如何编写查询,其中日期始终是当前日期之前的X个月数?
date
2015-06
2015-05
2015-04
2015-03
2015-02
例如我希望它是:
Select *
From dbo.name
Where date in (X months ago from current date)
如果今天的日期是2015-12而且我想要3个月前,我希望查询为:
Select *
From dbo.name
Where date in ('2015-11','2015-10','2015-09')
由于
答案 0 :(得分:1)
Select *
From dbo.name
Where CAST([Date] + '-01' AS DATE) >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -3, 0)
答案 1 :(得分:0)
由于您的日期字符串格式为yyyy-mm
,因此您可以使用< > =。您只需要使用样式126(yyyy-mm-ddThh:mi:ss.mmm)将当前日期转换为varchar(7)
例如
DECLARE @CurrentDate DATETIME = GETDATE()
DECLARE @XMonthsAgo INT = 3
DECLARE @Dates TABLE ([date] varchar(7))
INSERT INTO @Dates VALUES
('2015-09'),('2015-08'),('2015-07'),('2015-06'),('2015-05'),('2015-04'),('2015-03'),
('2015-02'),('2015-01'),('2014-12'),('2014-11'),('2014-10'),('2014-09'),('2014-08'),
('2014-07'),('2014-06'),('2014-05'),('2014-04'),('2014-03'),('2014-02'),('2014-01')
SELECT *
FROM @Dates d
WHERE [date] >= CONVERT(VARCHAR(7), DATEADD(month, -@XMonthsAgo, @CurrentDate), 126)
AND [date] < CONVERT(VARCHAR(7), @CurrentDate, 126)
结果
date
----
2015-07
2015-06
2015-05