获取指定日期所在月份的第一天

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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐