当前月的第1个星期1语句如下
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)

解决方案 »

  1.   

    别人写的一个例子,返回某年某月第几个星期的开始和结束时间
    create proc test_p @year int,@month int,@weekday int
    as
    declare @date datetime
    set @date=rtrim(@year)+right(100+@month,2)+'01'
    select [星期一]=dateadd(wk,@weekday,dateadd(day,1-(@@datefirst+datepart(dw,@date)-2)%7-1,@date)),
    [星期日]=dateadd(wk,@weekday,dateadd(day,7-(@@datefirst+datepart(dw,@date)-2)%7-1,@date))--测试:
    exec test_p 2007,4,1
      

  2.   

    create proc test_p @year int,@month int,@weekday int
    as
    declare @date datetime
    set @date=rtrim(@year)+right(100+@month,2)+'01'
    select [星期一]=dateadd(wk,@weekday,dateadd(day,1-(@@datefirst+datepart(dw,@date)-2)%7-1,@date)),
    [星期日]=dateadd(wk,@weekday,dateadd(day,7-(@@datefirst+datepart(dw,@date)-2)%7-1,@date))
    go --掉了一個GO,要不然一起執行會報錯的--测试:
    exec dbo.test_p 2007,4,1
      

  3.   

    需要的是第几个星期几,而不是第几个星期的星期几。
    不过还是谢谢gahade(与君共勉)
      

  4.   

    declare @int int,@weekday varchar(10),@thedate datetime
    select @int = 3,@weekday = '星期三',@thedate=getdate()
    declare @date datetime
    set @date = dateadd(day,-day(@thedate-1),@thedate)
    while(MONTH(@thedate)=MONTH(@date)and @int > 0)
    begin
    if(datename(weekday,@date)=@weekday)
    set @int=@int-1
    set @date=dateadd(day,1,@date)
    end
    if(@int=0)
    print convert(varchar(10),dateadd(day,-1,@date),120)
    else
    print '没有这一天'
      

  5.   

    --有点问题~~改一改:)declare @int int,@weekday varchar(10),@thedate datetime
    select @int = 3,@weekday = '星期三',@thedate=getdate()
    declare @date datetime
    set @date = dateadd(day,-day(@thedate-1),@thedate)
    while((MONTH(@thedate)=MONTH(@date)or day(@thedate)=day(@date))and @int > 0)
    begin
    if(datename(weekday,@date)=@weekday)
    set @int=@int-1
    set @date=dateadd(day,1,@date)
    end
    if(@int=0)
    print convert(varchar(10),dateadd(day,-1,@date),120)
    else
    print '没有这一天'