create proc p_wsp
as
    declare @star datetime
    set datefirst 1
    set @star=convert(varchar(7),getdate(),120)+'-01'
    if(datepart(dw,@star)=7)
        set @star=dateadd(dd,1,@star)
    --得到这个月第一个星期六
    set @star=dateadd(dd,6-datepart(dw,@star),@star)
    --得到本月第四个星期六
    set @star=dateadd(dd,21,@star)
    if(datediff(dd,@star,getdate())=0) --如果今天是本月第四个星期六,则执行删除操作
    begin
            ---删除
            print 'DELETE'
    end
    else
    begin
            --不做任何操作
            print 'NO'
    end
go上面实现的效果是每个月的第四个周六执行,现在我要实现的效果是
每月的第四个周六的20:00 执行请问怎么修改哦。谢谢了  主要是时间上的限制怎么限制一下。

解决方案 »

  1.   

    create proc p_wsp
    as
        declare @star datetime
        set datefirst 1
        set @star=convert(varchar(7),getdate(),120)+'-01'
        if(datepart(dw,@star)=7)
            set @star=dateadd(dd,1,@star)
        --得到这个月第一个星期六
        set @star=dateadd(dd,6-datepart(dw,@star),@star)
        --得到本月第四个星期六
        set @star=cast(convert(varchar(10),dateadd(dd,21,@star),120)+' 20:00:00' as datetime)  ---修改这边
        if(datediff(dd,@star,getdate())=0) --如果今天是本月第四个星期六,则执行删除操作
        begin
                ---删除
                print 'DELETE'
        end
        else
        begin
                --不做任何操作
                print 'NO'
        end
    go
      

  2.   

    create proc p_wsp
    as
        declare @star datetime
        set datefirst 1
        set @star=convert(varchar(7),getdate(),120)+'-01'
        if(datepart(dw,@star)=7)
            set @star=dateadd(dd,1,@star)
        --得到这个月第一个星期六
        set @star=dateadd(dd,6-datepart(dw,@star),@star)
        --得到本月第四个星期六
        set @star=dateadd(dd,21,@star)
        if(datediff(dd,@star,getdate())=0) and datepart(hh,@star)=20 --如果今天是本月第四个星期六,则执行删除操作
        begin
                ---删除
                print 'DELETE'
        end
        else
        begin
                --不做任何操作
                print 'NO'
        end
    go
      

  3.   


    create proc p_wsp
    as
        declare @star datetime
        set datefirst 1
        set @star=convert(varchar(7),getdate(),120)+'-01'
        if(datepart(dw,@star)=7)
            set @star=dateadd(dd,1,@star)
        --得到这个月第一个星期六
        set @star=dateadd(dd,6-datepart(dw,@star),@star)
        --得到本月第四个星期六
        set @star=dateadd(dd,21,@star)
        if(datediff(ss,@star,getdate())=72000) --如果今天是本月第四个星期六,则执行删除操作
        begin
                ---删除
                print 'DELETE'
        end
        else
        begin
                --不做任何操作
                print 'NO'
        end
    go
    精确到秒了,就是getdate()取得的时间比第四个周六00:00:00晚72000秒(20小时)
      

  4.   

    修改下
    create proc p_wsp
    as
        declare @star datetime
        set datefirst 1
        set @star=convert(varchar(7),getdate(),120)+'-01'
        if(datepart(dw,@star)=7)
            set @star=dateadd(dd,1,@star)
        --得到这个月第一个星期六
        set @star=dateadd(dd,6-datepart(dw,@star),@star)
        --得到本月第四个星期六
        set @star=dateadd(dd,21,@star)
        if(datediff(dd,@star,getdate())=0) and datepart(hh,getdate())=20 --如果今天是本月第四个星期六,则执行删除操作
        begin
                ---删除
                print 'DELETE'
        end
        else
        begin
                --不做任何操作
                print 'NO'
        end
    go
      

  5.   

    1楼答案不对,不管你怎么修改@star,后面的datediff还是使用dd参数的话同一天的任何时间相比,天数差都是04楼也不对,这么写的话20点的每分每秒每毫秒都会执行删除操作
      

  6.   

    不对的哦,如果不是20:00也会执行 ,现在还是只要是当天就执行
    set @star=cast(convert(varchar(10),dateadd(dd,21,@star),120)+' 20:00:00' as datetime) 能否详解一下这是什么意思呢
      

  7.   


    dateadd(dd,21,@star)   取本周第四个周六
    convert(varchar(10),dateadd(dd,21,@star),120)  指定形式取出第四个周六的年月日
    convert(varchar(10),dateadd(dd,21,@star),120)+' 20:00:00'   加上晚上8点构成第四个周六20点的字符串
    cast(convert(varchar(10),dateadd(dd,21,@star),120)+' 20:00:00' as datetime)  把上面的字符串转换成datetime类型
      

  8.   

    create proc p_wsp
    as
        declare @star datetime
        set datefirst 1
        set @star=convert(varchar(7),getdate(),120)+'-01'
        if(datepart(dw,@star)=7)
            set @star=dateadd(dd,1,@star)
        --得到这个月第一个星期六
        set @star=dateadd(dd,6-datepart(dw,@star),@star)
        --得到本月第四个星期六
        set @star=dateadd(dd,21,@star)
        if(datediff(dd,@star,getdate())=0) and datepart(hh,@star)=20 and datepart(mi,@star)=0 and datepart(ss,@star)=0 and datepart(ms,@star)=0 --如果今天是本月第四个星期六,则执行删除操作
        begin
                ---删除
                print 'DELETE'
        end
        else
        begin
                --不做任何操作
                print 'NO'
        end
    go
      

  9.   


    那个是精确到秒的,如果你的这个判断逻辑做不到1秒判断一次的话用分钟判断吧把if(datediff(ss,@star,getdate())=72000) 这句
    改成if(datediff(MI,@star,getdate())=1200)