SQL根据当前日期创建日期列表

时间:2015-08-28 15:38:21

标签: sql-server sql-server-2008 date

我有一系列日期,范围从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')

由于

2 个答案:

答案 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