我需要编写SQL Server存储过程来计算用户提供截止日期和月份差异的月份的第一天。
存储过程的参数将是
@TillDate DATE, @NoOfMonthFromStartDate INT
示例:
@TillDate = '2015-10-31', @NoOfMonthFromStartDate = 5
结果应该是:
01-10-2015
01-09-2015
01-08-2015
01-07-2015
01-06-2015
请提供宝贵的帮助。
非常感谢
答案 0 :(得分:0)
使用计数表生成N个日期
DECLARE @TillDate DATE = '20151031'
DECLARE @NoOfMonthFromStartDate INT = 5
;WITH Tally(N) AS(
SELECT TOP(@NoOfMonthFromStartDate)
ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
FROM sys.columns
)
SELECT
DATEADD(MONTH, -(N-1), DATEADD(MONTH, DATEDIFF(MONTH, 0, @TillDate), 0))
FROM Tally
如果@TillDate
始终是月末:
;WITH Tally(N) AS(
SELECT TOP(@NoOfMonthFromStartDate)
ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
FROM sys.columns
)
SELECT
DATEADD(MONTH, -N, DATEADD(DAY, 1, @TillDate))
FROM Tally