實現這個功能,先參考下麵幾篇博文《T-SQL獲取二月份天數》https://www.cnblogs.com/insus/archive/2011/04/22/2025019.html 《如何獲取月份的天數》https://www.cnblogs.com/insus/archive/2011/09/1 ...
實現這個功能,先參考下麵幾篇博文《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 ENDSource 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 ENDSource Code
上面2個自定義函數均可以使用。