[英]Get Mondays of the last two months from SQL Server 2008
If today is 10 JULY 2015 then what I need is a record set in SQL Server which has the following records 如果今天是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
Try this 尝试这个
;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'
With the following expression you get the last Monday: 使用以下表达式,您可以获得最后一个星期一:
CAST(GETDATE()-(@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE)
Here we use @@DATEFIRST and DATEPART(weekday,...) to find the last MONDAY. 在这里,我们使用@@ DATEFIRST和DATEPART(weekday,...)查找最后一个星期一。
Then you should generate 8 (two months) rows sequence of days each of them -7 days prior the next. 然后,您应该生成8天(两个月)的行序列,每行的天数为下一天的-7天。 Here I've used CTE but you can use UNION or TOP 8 rows from existing (system or user) in your DB table to generate 8 rows.
在这里,我使用了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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.