在我的存储过程中,我提供了一个varchar参数,如下所示:
'201503'
这显然表明了2015年的第3个月。但是,我需要从给定参数中选择相同格式的前12个月,包括参数本身。
例如,如果给出'201503'
我需要得到以下内容:
'201503'
'201502'
'201501'
'201412'
'201411'
'201410'
'201409'
'201408'
'201407'
'201406'
'201405'
'201404'
真的很感激一些帮助! :)
答案 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