求某日期所在"周"的周一的日期与周日的日期
http://expert.csdn.net/Expert/topic/1252/1252182.xml?temp=.5142328declare @dateX smalldatetime
set @dateX = '2002-12-16'
select dateadd(day, case when datepart(weekday,@dateX) = 1 then - 5  
                         else 2 end 
                    - datepart(weekday,@dateX),@dateX) 
       ,dateadd(day,7 - datepart(weekday,@dateX) + 
                        case when datepart(weekday,@dateX) = 1 then - 6  
                             else 1 end 
                      ,@dateX)
       --declare @dateX smalldatetime
--set @dateX = '2002-12-15'
SET DATEFIRST 1
select dateadd(day, - datepart(weekday,@dateX),@dateX) + 1
       ,dateadd(day,7 - datepart(weekday,@dateX),@dateX)
SET DATEFIRST 7

解决方案 »

  1.   

    SET DATEFIRST 1select getdate()-(datepart(dw,getdate())-1),getdate()+(7-datepart(dw,getdate()))
      

  2.   

    playyuer,happydreamer:
    这两种方法都对,行谢过了,但并不是我想要的。
    已知条件是
    2003年的第n周

    这一周的第一天和最后一天的日期,
    多谢了
      

  3.   

    declare @a int
    set @a=1declare @start datetime
    set @start=dateadd(wk,@a,cast(cast(year(getdate()) as char(4))+'-01-01' as datetime))
    select @start 开始时间,dateadd(day,7,@start) 结束时间??
      

  4.   

    思路是对的,但结果不对,我试验了一下,应该可以改进!
    期待ing!
      

  5.   

    有两点:
    1.系统默认每周第一天为星期天,这点要修改。
    2.2003-01-01本身就是第一周。declare @n int
    set @n=1select 
    dateadd(wk,@n-1,'2003-01-01')-datepart(dw,'2003-01-01')+2 as start,
    dateadd(wk,@n-1,'2003-01-01')-datepart(day,'2003-01-01')+6 as endday
      

  6.   


    declare @n int
    set @n=1
    select 
    dateadd(wk,@n-1,'2003-01-01')-datepart(dw,'2003-01-01')+2 as start,
    dateadd(wk,@n-1,'2003-01-01')-datepart(day,'2003-01-01')+5 as endday
    select 
    datename(dw,dateadd(wk,@n-1,'2003-01-01')-datepart(dw,'2003-01-01')+2) as start,
    datename(dw,dateadd(wk,@n-1,'2003-01-01')-datepart(day,'2003-01-01')+5) as enddaystart                                                  endday                                                 
    ------------------------------------------------------ ------------------------------------------------------ 
    2002-12-30 00:00:00.000                                2003-01-05 00:00:00.000(所影响的行数为 1 行)start                          endday                         
    ------------------------------ ------------------------------ 
    星期一                            星期日(所影响的行数为 1 行)
      

  7.   

    所以最终语句应为:declare @n int
    set @n=1
    select 
    dateadd(wk,@n-1,'2003-01-01')-datepart(dw,'2003-01-01')+2 as start,
    dateadd(wk,@n-1,'2003-01-01')-datepart(day,'2003-01-01')+5 as endday
      

  8.   

    declare @a int
    set @a=1SET DATEFIRST 1declare @end datetime
    set @end=dateadd(wk,@a,cast(cast(year(getdate()) as char(4))+'-01-01' as datetime))select dateadd(day,-7,@end) 开始时间,@end 结束时间
    SET DATEFIRST 7
      

  9.   

    TRY:按星期一是第一天。declare @a int
    set @a=10SET DATEFIRST 1declare @Curr_Date datetime
    set @Curr_Date=dateadd(wk,@a-1,cast(cast(year(getdate()) as char(4))+'-01-01' as datetime))select datepart(wk,@Curr_Date)select datepart(dw,@Curr_Date)select @Curr_Date-datepart(dw,@Curr_Date)+1 开始时间,@Curr_Date+7-datepart(dw,@Curr_Date) 结束时间