实现这个功能,先参考下面几篇博文《t-sql获取二月份天数》
《如何获取月份的天数》
《获取指定日期所在月份的第一天》
可以写一个table-valued functions:
set ansi_nulls on go set quoted_identifier on go -- ============================================= -- author: insus.net -- create date: 2019-05-09 -- update date: 2019-05-09 -- description: 获取指定月份所有日期 -- ============================================= create function [dbo].[tvf_daysofmonth] ( @inputdate datetime ) returns @dump table ( [date] datetime ) as begin declare @firstdayofmonth datetime = dateadd(month,datediff(month,0,@inputdate),0) --获取所在月份第一天日期 declare @daysofmonth int = day(dateadd(day,-1, dateadd(month,1,@firstdayofmonth))) --获取所在月份的天数 insert into @dump ([date]) values(@firstdayofmonth) --把第一天插入表中。 declare @d int = 1 while @d < @daysofmonth begin insert into @dump ([date]) values(@firstdayofmonth + @d) set @d = @d + 1 end return end
例子说明:
如果想更多的写法参考, insus.net更改了上面的自定义函数,先是获取指定日期所在月份的第一天日期,然后获取指定日期下一个月份的第一天日期。
set ansi_nulls on go set quoted_identifier on go -- ============================================= -- author: insus.net -- create date: 2019-05-09 -- update date: 2019-05-09 -- description: 获取指定月份所有日期 -- ============================================= create function [dbo].[tvf_daysofmonth] ( @inputdate datetime ) returns @dump table ( [date] datetime ) as begin declare @firstdayofmonth datetime = dateadd(month,datediff(month,0,@inputdate),0) --获取指定月份第一天日期 declare @firstdayofnexmonth datetime = dateadd(month,1,@firstdayofmonth) --获取指定月份下一个月份的第一天日期 declare @dumpdate datetime = @firstdayofmonth while (@dumpdate < @firstdayofnexmonth) begin insert into @dump ([date]) values(@dumpdate) set @dumpdate = @dumpdate + 1 end return end
上面2个自定义函数均可以使用。