获取当月的天数列表

实现这个功能,先参考下面几篇博文《T-SQL获取二月份天数https://www.cnblogs.com/insus/archive/2011/04/22/2025019.html

如何获取月份的天数https://www.cnblogs.com/insus/archive/2011/09/10/2173028.html

获取指定日期所在月份的第一天https://www.cnblogs.com/insus/archive/2011/09/11/2173612.html


可以写一个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
Source Code

例子说明:

如果想更多的写法参考, 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
Source Code

上面2个自定义函数均可以使用。

原文地址:https://www.cnblogs.com/insus/p/10837900.html