当前位置: 代码迷 >> Sql Server >> 获取上周的开始时间和结束时间,该怎么解决
  详细解决方案

获取上周的开始时间和结束时间,该怎么解决

热度:25   发布时间:2016-04-24 19:02:20.0
获取上周的开始时间和结束时间
我想获取到上周的开始时间和结束时间,例如:今天的日期是:2013-11-02,
那么上周的开始时间为:2013-10-27,结束时间为:2013-10-31,要怎么获取这上周的时间呢?请大家给个建议,谢谢.....
------解决方案--------------------
改改吧

SQL获取周开始日期和结束日期
DECLARE@SYearint--开始年份
DECLARE@EYearint--结束年份

SETDATEFIRST 7--设周日为每周第一天
SET@SYear=2004
SET@EYear=2010
--周以至少四天为计 
--判断第一周的开始与结束
DECLARE@YSDateDATETIME--年的第一周开始时间
DECLARE@YEDateDATETIME--年的最后周结束时间
DECLARE@WSDateDATETIME--用于循环的年内某周的开始日期
DECLARE@WEDateDATETIME--用于循环的年内某周的开始日期
DECLARE@IWeekint--当前周为本年的第几周
WHILE@SYear<=@EYear
BEGIN--BEGIN WHILE YEAR

SET@YSDate=CAST( (CAST( @SYearASVARCHAR(4) )+'/01/01') ASDATETIME)
SET@YEDate=CAST( (CAST( @SYearASVARCHAR(4) )+'/12/31') ASDATETIME)
SET@IWeek=1

IFDATEPART(DW,@YSDate)>4--第一周已不足4天 从第二周开始算第一周
BEGIN
SET@YSDate=DATEADD(DAY,(8-DATEPART(DW,@YSDate)) ,@YSDate)--本周开始日期
END
ELSE--第一周足4天 从本周日算第一天
BEGIN
SET@YSDate=DATEADD(Day,(-(DATEPART(DW,@YSDate)-1)) ,@YSDate)
END

SET@WSDate=@YSDate
SET@WEDate=DATEADD(DAY,6,@WSDate) --本周结束日期

WHILEDATEDIFF(DAY,@WSDate,@YEDate)>=4
BEGIN
--执行Insert
INSERTINTOtWeek(tYear, tWeekSeq, tStartDate, tEndDate)
VALUES(@SYear,@IWeek,@WSDate,@WEDate)
--重置参数
SET@IWeek=@IWeek+1
SET@WSDate=@WSDate+7
SET@WEDate=@WEDate+7
END

SET@SYear=@SYear+1

END
------解决方案--------------------
SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,getdate()),getdate()) AS '本周第一天(周日)'--注意此处与@getdate()first的值有关  
,DATEADD(WEEK,DATEDIFF(WEEK,-1,getdate()),-1) AS '所在星期的星期日'--注意此处与@getdate()first的值有关  
,DATEADD(DAY,2-DATEPART(WEEKDAY,getdate()),getdate()) AS '所在星期的第二天'--注意此处与@getdate()first的值有关,其他天数类推  
,DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,getdate()),getdate())) AS '上个星期第一天(周日)'--注意此处与@getdate()first的值有关  
,DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,getdate()),getdate())) AS '下个星期第一天(星期日)'--注意此处与@getdate()first的值有关  
,DATENAME(WEEKDAY,getdate()) AS '本日是周几'  
,DATEPART(WEEKDAY,getdate()) AS '本日是周几'

/*
本周第一天(周日)               所在星期的星期日                所在星期的第二天                上个星期第一天(周日)             下个星期第一天(星期日)            本日是周几                          本日是周几
----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ------------------------------ -----------
2013-12-08 15:23:19.107 2013-12-08 00:00:00.000 2013-12-09 15:23:19.107 2013-12-01 15:23:19.107 2013-12-15 15:23:19.107 Tuesday                        3

*/

------解决方案--------------------
引用:
我想获取到上周的开始时间和结束时间,例如:今天的日期是:2013-11-02,
那么上周的开始时间为:2013-10-27,结束时间为:2013-10-31,要怎么获取这上周的时间呢?请大家给个建议,谢谢.....

2013-10-27 到2013-10-31只有5天啊


declare @date date='2013-11-02'

select  dateadd(d,1-7-DATEPART(weekday,@date), @date) StartDay
,dateadd(d,6,dateadd(d,-6-DATEPART(weekday,@date), @date)) EndDay

try this
  相关解决方案