如何在SQL中获取当年的所有周末日期?

Kar*_*tel 5 sql sql-server-2008

我试过但无法得到正确的解决方案.我想要一个SQL查询,列出当前年份的所有周末日期.

我试过这个SQL查询:

WITH hier(num, lvl) AS (
    SELECT  0, 1
            UNION ALL
    SELECT  100, 1
            UNION ALL 
    SELECT  num + 1, lvl + 1
    FROM    hier
    WHERE   lvl < 100 
)
SELECT lvl [Week], 
convert(date,DATEADD(dw, -DATEPART(dw, DATEADD(wk,DATEDIFF(wk,0,'12/31/'+convert(nvarchar,YEAR(getdate()))), 0)+6 ),
DATEADD(wk, DATEDIFF(wk,0,'12/31/'+convert(nvarchar,YEAR(getdate()))), 0)+6 ) - num  * 7,101) [End Date]
FROM    hier a
where   num < 52
ORDER BY [End Date] asc
Run Code Online (Sandbox Code Playgroud)

它的输出是这样的:

Week  End date
52  2012-01-14
51  2012-01-21
50  2012-01-28
49  2012-02-04
Run Code Online (Sandbox Code Playgroud)

我希望日期从头开始 - 所以,上面缺少一个周末,这是2012-07-01.此外,我希望周数显示1, 2, 3...而不是52, 51....

ran*_*oms 6

看看这篇博文.

您的问题将详细解释.

DECLARE @Year AS INT,
@FirstDateOfYear DATETIME,
@LastDateOfYear DATETIME
-- You can change @year to any year you desire
SELECT @year = 2010
SELECT @FirstDateOfYear = DATEADD(yyyy, @Year - 1900, 0)
SELECT @LastDateOfYear = DATEADD(yyyy, @Year - 1900 + 1, 0)
-- Creating Query to Prepare Year Data
;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 LIKE 'Sunday'
/*
WHERE DayName IN ('Saturday,Sunday') -- For Weekend
WHERE DayName NOT IN ('Saturday','Sunday') -- For Weekday
WHERE DayName LIKE 'Monday' -- For Monday
WHERE DayName LIKE 'Sunday' -- For Sunday
*/
OPTION (MaxRecursion 370)
Run Code Online (Sandbox Code Playgroud)

  • @Kartik Patel WeekofYr = DATEPART(WEEK,FromDate).即使我的查询也一样 (2认同)