如果给出日期时间,请获取前12个月的日期

时间:2015-05-14 12:46:40

标签: sql sql-server

在我的存储过程中,我提供了一个varchar参数,如下所示:

'201503'

这显然表明了2015年的第3个月。但是,我需要从给定参数中选择相同格式的前12个月,包括参数本身。

例如,如果给出'201503'

我需要得到以下内容:

'201503'
'201502'
'201501'
'201412'
'201411'
'201410'
'201409'
'201408'
'201407'
'201406'
'201405'
'201404'

真的很感激一些帮助! :)

3 个答案:

答案 0 :(得分:8)

试试这个:

DECLARE @m VARCHAR(10) = '201503'

SELECT  LEFT(CONVERT(VARCHAR(8), DATEADD(m, -id, @m + '01'), 112), 6) AS result
FROM    ( VALUES ( 0), ( 1), ( 2), ( 3), ( 4), ( 5), ( 6), ( 7), ( 8), ( 9),
        ( 10), ( 11) ) m ( id ) ORDER BY result DESC

答案 1 :(得分:1)

这也可能有效。

DECLARE @Date VARCHAR(8) = '201503';

SELECT TOP (12) LEFT(CONVERT(varchar, DATEADD(MM, (ROW_NUMBER() OVER(ORDER BY (SELECT 1)) - 1) * -1, CAST(@Date + '01' AS DATETIME2)),112),6)
FROM sys.columns

答案 2 :(得分:0)

DECLARE @Param VARCHAR(6) = '201503'


SELECT TOP 12 CONVERT(VARCHAR(6)
                   , DATEADD(MONTH, - number , CAST(@Param + '01' AS DATE))
                   , 112)
FROM (
        SELECT TOP 12 number 
        FROM master..spt_values
        WHERE number between 0 AND 11 
        GROUP BY number
     )t

结果

201503
201502
201501
201412
201411
201410
201409
201408
201407
201406
201405
201404