สวัสดีครับ
วันนี้ขอนำเสนอวิธีการ แยกข้อมูลวันที่ให้ออกมาเป็นวันๆนะครับ ยกตัวอย่างหากข้อมูลที่เก็บอยู่เป็น 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