Monday, April 9, 2012

Lấy tất cả các ngày trong tuần bằng T-SQL

Với T-SQl, bạn có thể liệt kê tất cả các ngày trong tuần của một năm. Ví dụ, liệt kê tất cả các ngày thứ 7 của năm 2009

DECLARE @Year AS INT,
@FirstDateOfYear DATETIME,
@LastDateOfYear DATETIME
-- Năm cần liệt kê
SELECT @year = 2010
SELECT @FirstDateOfYear = DATEADD(yyyy, @Year - 1900, 0)
SELECT @LastDateOfYear = DATEADD(yyyy, @Year - 1900 + 1, 0)

;WITH cte AS (
SELECT 1 AS DayID,
@FirstDateOfYear AS FromDate,
DATENAME(dw, @FirstDateOfYear) AS Dayname
UNION ALL
SELECT cte.DayID + 1 AS DayID,
DATEADD(d, 1 ,cte.FromDate),
DATENAME(dw, DATEADD(d, 1 ,cte.FromDate)) AS Dayname
FROM cte
WHERE DATEADD(d,1,cte.FromDate) < @LastDateOfYear
)
SELECT FromDate AS Date, Dayname
FROM CTE
WHERE DayName IN ('Saturday','Sunday')
/*
Có thể thay đổi điều kiện:
WHERE DayName IN ('Saturday,Sunday') -- Ngày cuối tuần: Thứ 7 và CN
WHERE DayName NOT IN ('Saturday','Sunday') -- Những ngày trong tuần
WHERE DayName LIKE 'Monday' -- Thứ 2
WHERE DayName LIKE 'Sunday' -- CN
*/
OPTION (MaxRecursion 370) -- Số lượng đệ quy
Kết quả:

No comments:

Post a Comment