我想获取到上周的开始时间和结束时间,例如:今天的日期是: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-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