ThaiSQL.COM Wiki and Forum (My knowledge will be useful for you)

RSS


Quick Search
»
Advanced Search »

HostedBy
สวัสดีครับ

วันนี้ผมมีวิธีการแจกแจงข้อมูลว่าแต่ละเดือนมีกี่วัน เริ่มต้นวันไหน ถึงวันไหนมาให้นะครับ โดยใช้กับรุ่น 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