在sql server中给出结束日期和月份差异的第一天的存储过程

时间:2015-11-17 05:49:03

标签: sql-server sql-server-2008

我需要编写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

请提供宝贵的帮助。

非常感谢

1 个答案:

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