实现这个功能,先参考下面几篇博文《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个自定义函数均可以使用。