Sql server 用于在sql server中指定结束日期和月差数时查找月份第一天的存储过程

Sql server 用于在sql server中指定结束日期和月差数时查找月份第一天的存储过程,sql-server,sql-server-2008,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 请提供宝贵的帮助。使用计数表生成N个日期 D

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

请提供宝贵的帮助。

使用计数表生成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

请提供您宝贵的尝试。谢谢@FelixPamittan