สวัสดีครับ
วันนี้ผมมีวิธีการแจกแจงข้อมูลว่าแต่ละเดือนมีกี่วัน เริ่มต้นวันไหน ถึงวันไหนมาให้นะครับ โดยใช้กับรุ่น 2005 ขึ้นไปนะครับ
เพราะว่าเป็นการใช้ CTE (Common Table Expression) นะครับ ยังไงก็สามารถนำไปดัดแปลงได้ตามต้องการนะครับ สำหรับการสร้างปฏิทินนะครับ
DECLARE @Year AS INT ,
@FirstDateOfYear DATETIME ,
@LastDateOfYear DATETIME
SELECT @year = 2010
SELECT @FirstDateOfYear = DATEADD(yyyy, @Year - 1900, 0) ;
SELECT @LastDateOfYear = DATEADD(yyyy, @Year - 1900 + 1, -1) ;
WITH cte
AS (
SELECT @FirstDateOfYear AS FirstDateOfMonth ,
DATEADD(d, -1, DATEADD(m, 1, @FirstDateOfYear)) AS LastDateOfMonth ,
DATEDIFF(d, @FirstDateOfYear,
DATEADD(d, -1,
DATEADD(m, 1, @FirstDateOfYear))) + 1 AS Days
UNION ALL
SELECT DATEADD(m, 1, cte.FirstDateOfMonth) ,
DATEADD(d, -1,
DATEADD(m, 1,
DATEADD(m, 1, cte.FirstDateOfMonth))) ,
DATEDIFF(d, DATEADD(m, 1, cte.FirstDateOfMonth),
DATEADD(d, -1,
DATEADD(m, 1,
DATEADD(m, 1,
cte.FirstDateOfMonth))))
+ 1 AS Days
FROM cte
WHERE cte.LastDateOfMonth < @LastDateOfYear
)
SELECT *
FROM cte
OPTION ( MAXRECURSION 12 )MSDN Code