27,580
社区成员
发帖
与我相关
我的任务
分享
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处于本月第几周。
处于第一周和第二周分别采取不同的获取方式。
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 就这样。所以我才烦....不知道获取这杨的时间。
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 thisSELECT 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
*/