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

RSS


Quick Search
»
Advanced Search »

HostedBy
สวัสดีครับ วันนี้ขอนำเสนอวิธีการ แยกข้อมูลวันที่ให้ออกมาเป็นวันๆนะครับ ยกตัวอย่างหากข้อมูลที่เก็บอยู่เป็น DateFrom และ DateTo ซึ่งก็หมายถึงว่าเก็บเป็นวันเริ่ม และสิ้นสุด แล้วเราอาจจะมีความจำเป็นในการแยกข้อมูลมาเป็นแบบวันๆ ตั้งแต่วันเริ่มไล่ไปเป็นวันๆเรื่อยๆจนถึงวันที่สิ้นสุดนะครับ ในความสามารถใน SQL Server 2005 และ SQL Server 2008 นั้นสามารถทำได้โดยใช้ CTE หรือ Common Table Expression นะครับ เรามาลองดูกันนะครับ

สร้าง User Defined Function ก่อนนะครับ

CREATE FUNCTION [dbo].ufnDATEEXTRACT
    (
      @StartDate DATETIME ,
      @EndDate DATETIME
    )
RETURNS @DateTable TABLE ( [date] DATETIME )
AS 
    BEGIN
        SELECT  @StartDate = DATEADD(dd, 0, DATEDIFF(dd, 0, @StartDate)) ;
        SELECT  @EndDate = DATEADD(dd, 0, DATEDIFF(dd, 0, @EndDate)) ;
        WITH    CTE_DatesTable
                  AS ( SELECT   @StartDate AS [date]
                       UNION ALL
                       SELECT   DATEADD(dd, 1, [date])
                       FROM     CTE_DatesTable
                       WHERE    DATEADD(dd, 1, [date]) <= @EndDate
                     )
            INSERT  INTO @DateTable
                    ( [date] 
                    )
                    SELECT  [date]
                    FROM    CTE_DatesTable
            OPTION  ( MAXRECURSION 0 )
        RETURN
    END

หลังจากนั้นวิธีทดสอบนะครับ

SELECT  *
FROM    dbo.ufnDATEEXTRACT(GETDATE(), DATEADD(MONTH, 1, GETDATE()))

ที่มา URL