簡體   English   中英

從SQL Server 2008獲取過去兩個月的星期一

[英]Get Mondays of the last two months from SQL Server 2008

如果今天是2015年7月10日,那么我需要的是SQL Server中的記錄集,該記錄集包含以下記錄

 6 JULY 2015
29 JUNE 2015
22 JUNE 2015
15 JUNE 2015
 8 JUNE 2015
 1 JUNE 2015
25 MAY  2015

嘗試這個

;WITH dates AS 
(
    SELECT CONVERT(datetime,cast(month(getdate())-2 as varchar(2))+'/'+cast(day(getdate()) as varchar(2))+'/'+ cast(year(getdate()) as varchar(4))) as Date,' ' as eid
    UNION ALL
    SELECT DATEADD(d,1,[Date]),' ' as eid
    FROM dates 
    WHERE DATE < GETDATE()
)
select  datename(DD,dates.date)+' '+datename(MM,dates.date)+' '+ datename(YYYY,dates.date) from dates
where datename(dw,dates.date) = 'Monday'

使用以下表達式,您可以獲得最后一個星期一:

CAST(GETDATE()-(@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE)

在這里,我們使用@@ DATEFIRSTDATEPART(weekday,...)查找最后一個星期一。

然后,您應該生成8天(兩個月)的行序列,每行的天數為下一天的-7天。 在這里,我使用了CTE,但是您可以使用DB表中現有(系統或用戶)的UNION或TOP 8行來生成8行。

;WITH CT(n) AS
(
    SELECT 0
    UNION ALL
    SELECT n+1 FROM CT WHERE n < 7
)
SELECT DATEADD(DAY,-n*7,
      CAST(GETDATE()-
           (@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE))  as DT 
FROM CT ORDER BY n

Sqlfiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM