欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-13 23:31:36
实现这个功能,先参考下面几篇博文《T-SQL获取二月份天数》https://www.cnblogs.com/insus/archive/2011/04/22/2025019.html 《如何获取月份的天数》https://www.cnblogs.com/insus/archive/2011/09/1 ......

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