【发布时间】:2014-01-10 11:18:36
【问题描述】:
我需要循环遍历一个月内的每一天,但将固定数字作为该月的最后一天。
例如如果一个月的最后一天固定为 30, 一月会变成:
月初:2012 年 12 月 31 日上午 12:00 月底:2013 年 1 月 30 日 12:00AM
我已经实施了以下工作,除了 2 月份外,这些都可以正常工作。我似乎无法找到一个解决方案来确保这始终适用于每个月,无论月末日期是什么。 任何建议都非常感谢。
DECLARE @dt DATETIME
DECLARE @DayInstance DATETIME
DECLARE @LastDayOfMonth DATETIME
DECLARE @monthEndDate INT = 30
SET @dt = '2012-01-01 00:00:00.000'
WHILE @dt < GETDATE()
BEGIN
SET @DayInstance = @dt
SET @LastDayOfMonth = (SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@dt))),DATEADD(mm,1,@dt)),101))
IF @monthEndDate > 0
BEGIN
SET @LastDayOfMonth = DATEADD(DAY,(@monthEndDate-DATEPART(dd,@LastDayOfMonth)),@LastDayOfMonth)
SET @DayInstance = DATEADD(MONTH, -1, @LastDayOfMonth)
SET @DayInstance = DATEADD(DAY, 1, @DayInstance)
END
PRINT 'Month Start Date: ' + CAST(@DayInstance AS NVARCHAR(20))
PRINT 'Month End Date: ' + CAST(@LastDayOfMonth AS NVARCHAR(20))
PRINT ''
WHILE @DayInstance <= @LastDayOfMonth
BEGIN
-- Going to do more stuff here
SET @DayInstance = DATEADD(DAY, 1, @DayInstance)
END
SET @dt = DATEADD(MONTH, 1, @dt)
END
【问题讨论】:
标签: sql datetime sql-server-2012