declare @t datetime    --输入日期
declare @i intset @t = cast('2004-01-05' as datetime)
set @i = (@@Datefirst + datepart(weekday,@t))% 7select case 
         when @i = 0 then @t - 12
         when @i = 1 then @t - 13
         when @i = 2 then @t - 7
         when @i = 3 then @t - 8
         when @i = 4 then @t - 9
         when @i = 5 then @t - 10
         when @i = 6 then @t - 11
       end as Mon,
       case 
         when @i = 0 then @t - 6
         when @i = 1 then @t - 7
         when @i = 2 then @t - 1
         when @i = 3 then @t - 2
         when @i = 4 then @t - 3
         when @i = 5 then @t - 4
         when @i = 6 then @t - 5
       end as Sun

解决方案 »

  1.   

    SET DATEFIRST 1DECLARE @TEST  DATETIMESELECT @TEST='2005-1-10'SELECT DATEADD(D,-(DATEPART(dw,@TEST)+6),@TEST) ---上周一SELECT DATEADD(D,-DATEPART(dw,@TEST),@TEST) ---上周日
      

  2.   

    weekday函数,返回一个 Variant (Integer),包含一个整数,代表某个日期是星期几。WeekdayName函数,返回一个字符串,表示一星期中的某天。
    用这两个函数应该可以写个符合你的条件的东西的,用weekday应该就可以了
    判断一下日期是周几
      

  3.   

    --借鉴了老干部playyuer的思路,以下是可以在任意SQL Server环境下通用的代码:declare @t datetime    --输入日期
    declare @i intset @t = cast('2005-01-17' as datetime)
    set @i = (@@Datefirst + datepart(weekday,@t))% 7select case 
             when @i = 0 then @t - 12
             when @i = 1 then @t - 13
             when @i = 2 then @t - 7
             when @i = 3 then @t - 8
             when @i = 4 then @t - 9
             when @i = 5 then @t - 10
             when @i = 6 then @t - 11
           end as Mon,
           case 
             when @i = 0 then @t - 6
             when @i = 1 then @t - 7
             when @i = 2 then @t - 1
             when @i = 3 then @t - 2
             when @i = 4 then @t - 3
             when @i = 5 then @t - 4
             when @i = 6 then @t - 5
           end as Sun
    --输出
    Mon                        Sun 
    ----------------------------------------------
    2005-01-10 00:00:00 2005-01-16 00:00:00
      

  4.   

    SET DATEFIRST  1 --将星期一设置为一周的第一天declare @today int
    select @today = datepart(dw,getdate())--上个星期天
    select convert(varchar,dateadd(dy,-@today,getdate()),102)
    --上个星期一
    select convert(varchar,dateadd(dy,@today-8,getdate()),102)
      

  5.   

    晕,俺是看vb版的,怎么看到sql版了
      

  6.   

    declare @d datetime
    set @d=getdate()
    select 上周日=case when datepart(weekday,@d)=1
                       then @d-datepart(weekday,@d)+1-7
                       else @d-datepart(weekday,@d)+1
                  end,
           上周一=case when datepart(weekday,@d)=1
                       then @d-datepart(weekday,@d)-12
                       else @d-datepart(weekday,@d)-5
                  end
      

  7.   

    declare @var smallint
    select @var = @@DATEFIRST
    set  DATEFIRST  1上周日
    select convert(char(10),dateadd(dd,  -(datepart(weekday, getdate())), getdate()), 120)上周一
    select convert(char(10),dateadd(dd,  -(datepart(weekday, getdate()))-6, getdate()), 120)set DATEFIRST @var
      

  8.   

    declare @t datetime    --输入日期
    declare @i intset @t = cast('2005-01-17' as datetime)
    set @i = (@@Datefirst + datepart(weekday,@t))% 7select case 
             when @i = 0 then @t - 12
             when @i = 1 then @t - 13
             when @i = 2 then @t - 7
             when @i = 3 then @t - 8
             when @i = 4 then @t - 9
             when @i = 5 then @t - 10
             when @i = 6 then @t - 11
           end as Mon,
           case 
             when @i = 0 then @t - 6
             when @i = 1 then @t - 7
             when @i = 2 then @t - 1
             when @i = 3 then @t - 2
             when @i = 4 then @t - 3
             when @i = 5 then @t - 4
             when @i = 6 then @t - 5
           end as Sun
      

  9.   

    declare @d datetime
    set @d='2005-01-17'
    select dateadd(day,- 5-DATEPART(dw, @d) ,@d) as 上周一,
           dateadd(day,1-DATEPART(dw, @d),@d) as 上周日上周一                      上周日                    
    --------------------------- -----------------------------
    2005-01-10 00:00:00.000     2005-01-16 00:00:00.000(所影响的行数为 1 行)
      

  10.   

    declare @ datetime
    set @ = '2004-1-10'select 
    dateadd(day,case when (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7 = 0 --周六
                          then -5
                     when (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7 = 1 --周日(七)
                          then -6
                     when (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7 between 2 and 6 --周一至周五
                          then 2 - (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7
                end
            ,dateadd(week,-1,@)) as 上周一
    ,dateadd(day,case when (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7 = 0 --周六
                          then 1
                     when (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7 = 1 --周日(七)
                          then 0
                     when (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7 between 2 and 6 --周一至周五
                          then 8 - (@@Datefirst + datepart(weekday,dateadd(week,-1,@))) % 7
                end
            ,dateadd(week,-1,@)) as 上周日
      

  11.   

    declare @ datetime
    set @ = getdate()select @ + 
    case when (@@Datefirst + datepart(weekday,@)) % 7 = 0 --周六
              then -5
         when (@@Datefirst + datepart(weekday,@)) % 7 = 1 --周日(七)
              then -6
         when (@@Datefirst + datepart(weekday,@)) % 7 between 2 and 6 --周一至周五
              then 2 - (@@Datefirst + datepart(weekday,@)) % 7
    end + N.i
    from
    (
    select 0 as i
    union all select 1 union all select 2 union all select 3
    union all select 4 union all select 5 union all select 6
    union all select 7
    ) N