select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,13-datepart(day,getdate()),getdate()) ), 0)

解决方案 »

  1.   

    楼上的老大可否解释一下?
    dateadd(dd,13-datepart(day,getdate()),getdate())
    这一句实际上就是取每月的13号,那为什么要取13号那?有问题!
    实际上你取的是每个月的第二个星期一,但是第二个星期一跟第二个星期天未必有必然的联系
    一个月由周一开始 跟 由其他日子开始是不一样的
      

  2.   


    select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,13-datepart(day,getdate()),getdate()) ), -1)这样取的是周日 vivianfdlpw() 的方法没有问题
    只是我想不出来为什么是13号?
      

  3.   

    哦,我觉得 vivianfdlpw() 的方法好象有问题。
    如果是2005年的5月份的话,它的结果就是这个月的第二个星期天
    而是第二个星期一???
      

  4.   

    select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ), 6)
    第一个星期一的后六天不就是第二个周日吗!
      

  5.   

    Select Convert(char(8),getdate(),120)+Cast(15-datepart(w,Cast(convert(varchar(8),Getdate(),120)+'01' as datetime)) as char(2))
      

  6.   

    --  Sorry!
    --  应是Set Datefirst 1Select Convert(char(8),getdate(),120)+Cast(15-datepart(w,Cast(convert(varchar(8),Getdate(),120)+'01' as datetime)) as char(2))
      

  7.   


    SELECT 
    CASE WHEN DATEPART(DD,DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,13-datepart(day,getdate()),getdate()) ), 0))=8
    THEN
    DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,13-datepart(day,getdate()),getdate()) ), 0)+6
    ELSE
    DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,13-datepart(day,getdate()),getdate()) ), 0)-1
    END
      

  8.   

    经过反复试验,正解应该是
    select DATEADD(wk, DATEDIFF(wk,-1, dateadd(dd,14-datepart(day,getdate()),getdate()) ), -1)
    第二个星期天肯定在8-14号之间,所以应该从14号往前推
    coolingpipe(冷箫轻笛) 改的还是有问题,试一下2013-7-14(正好是星期天)就知道错在哪了
      

  9.   

    --终于做出来了,花了一小时,绝对正解,楼主给分。分太少
    --求出每个月的第二个星期天是哪一天?select 
    dateadd(day, 8 - datepart(weekday,dateadd(day,- datepart(day,getdate())+1,getdate())) + 7 , dateadd(day,- datepart(day,getdate())+1,getdate()))
      

  10.   

    --上面的稍微有一点问题:就是每月的一号如果是星期天的话,就要用CASE判断一下,下面完全OK!!!
    我的思路是:先算出每月一号是星期几,然后用:8 - 星期几(如星期天:1,星期六:7)+ 7就得到第二个星期天的日期了。select dateadd(day, 8 -   case when datepart(weekday,dateadd(day,- datepart(day,getdate())+1,getdate())) = 1 Then 8
     else 
                 datepart(weekday,dateadd(day,- datepart(day,getdate())+1,getdate()))
     end 

     + 7 , dateadd(day,- datepart(day,getdate())+1,getdate()))
      

  11.   

    oracle下好像比较简单:
    select next_day(last_day('?Date?'),2)+7 from dual
    先取出上一个月的最后一天last_day
    然后从上个月的最后一天开始找下一个周一next_day
    加上7天就是每个月的第二个周一
      

  12.   

    hehe,要用case的话我就不用发此贴了。其实正解我已经给出了,应该是对的