获取上周的开始时间和结束时间

music21 2013-12-10 03:19:23
我想获取到上周的开始时间和结束时间,例如:今天的日期是:2013-11-02,
那么上周的开始时间为:2013-10-27,结束时间为:2013-10-31,要怎么获取这上周的时间呢?请大家给个建议,谢谢.....
...全文
308 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leon_He2014 2013-12-13
  • 打赏
  • 举报
回复
引用 7 楼 music21 的回复:
[quote=引用 6 楼 stublue 的回复:] [quote=引用 楼主 music21 的回复:] 我想获取到上周的开始时间和结束时间,例如:今天的日期是: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[/quote] 我这的领导要求是这个的,我也想用这种方法获取上周的日期,但是要获取这一个月有几个周次,正好跨月的就那几天的天数,跨月后的几天就是另外一个周次的开始时间和结束时间,例如:11月有5个周次,第一周次的开始时间:2013-11-1 结束日期为:2013-11-2 第二周次开始时间:2013-11-3 结束日期:2013-11-9,第三周次是2013-11-10 2013-11-16 第三周次是:2013-11-17 2013-11-23 第四周次是:2013-11-24 2013-11-30 就这样。所以我才烦....不知道获取这杨的时间。[/quote]


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

select StartDay=case 
when ceiling(datediff(d,dateadd(d,6,dateadd(d,1-DATEPART(weekday,convert(varchar(6),@date,112)+'01'),convert(varchar(6),@date,112)+'01')) ,@date)/7.0)+1=1
 then dateadd(d,1-DATEPART(weekday,datediff(d,-1,convert(varchar(6),@date,112)+'01')), datediff(d,-1,convert(varchar(6),@date,112)+'01'))  
when ceiling(datediff(d,dateadd(d,6,dateadd(d,1-DATEPART(weekday,convert(varchar(6),@date,112)+'01'),convert(varchar(6),@date,112)+'01')) ,@date)/7.0)+1=2 
then convert(varchar(6),@date,112)+'01'
else dateadd(d,1-7-DATEPART(weekday,@date), @date)
end
,EndDay=case 
when ceiling(datediff(d,dateadd(d,6,dateadd(d,1-DATEPART(weekday,convert(varchar(6),@date,112)+'01'),convert(varchar(6),@date,112)+'01')) ,@date)/7.0)+1=1
 then dateadd(d,-1,convert(varchar(6),@date,112)+'01')
when ceiling(datediff(d,dateadd(d,6,dateadd(d,1-DATEPART(weekday,convert(varchar(6),@date,112)+'01'),convert(varchar(6),@date,112)+'01')) ,@date)/7.0)+1=2 
then dateadd(d,6,dateadd(d,1-DATEPART(weekday,convert(varchar(6),@date,112)+'01'), convert(varchar(6),@date,112)+'01'))
else dateadd(d,6,dateadd(d,-6-DATEPART(weekday,@date), @date))
end

再试试这个,大体思路是用@date与本月第一周的最后一天相减的结果除以7来判断@date处于本月第几周。 处于第一周和第二周分别采取不同的获取方式。
music21 2013-12-12
  • 打赏
  • 举报
回复
引用 2 楼 fengxiaohan211 的回复:
貌似用处不大,我还是倾向于六楼的做法
music21 2013-12-12
  • 打赏
  • 举报
回复
引用 6 楼 stublue 的回复:
[quote=引用 楼主 music21 的回复:] 我想获取到上周的开始时间和结束时间,例如:今天的日期是: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[/quote] 我这的领导要求是这个的,我也想用这种方法获取上周的日期,但是要获取这一个月有几个周次,正好跨月的就那几天的天数,跨月后的几天就是另外一个周次的开始时间和结束时间,例如:11月有5个周次,第一周次的开始时间:2013-11-1 结束日期为:2013-11-2 第二周次开始时间:2013-11-3 结束日期:2013-11-9,第三周次是2013-11-10 2013-11-16 第三周次是:2013-11-17 2013-11-23 第四周次是:2013-11-24 2013-11-30 就这样。所以我才烦....不知道获取这杨的时间。
Leon_He2014 2013-12-11
  • 打赏
  • 举报
回复
引用 楼主 music21 的回复:
我想获取到上周的开始时间和结束时间,例如:今天的日期是: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
LongRui888 2013-12-11
  • 打赏
  • 举报
回复
这个最好是建立一个 企业日历,我原来的公司就是这样的,里面写上所有的日期,周次等,直接查询就可以
Q315054403 2013-12-11
  • 打赏
  • 举报
回复
做个结构表,不用在SQL上动死脑筋
發糞塗牆 2013-12-10
  • 打赏
  • 举报
回复
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

*/
fengxiaohan211 2013-12-10
  • 打赏
  • 举报
回复
改改吧 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
發糞塗牆 2013-12-10
  • 打赏
  • 举报
回复

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧