returns 后面不用写 @da_te

解决方案 »

  1.   

    第一个错误是因为returns多了个S。
    第二个错误是因为不正确的定义了da_te的类型
    第三个错误是因为可能是因为你语法错误,改成 
    set @da_te=cast((cast(@ye_ar as varchar)+'-'+cast(@mon_th as varchar)+'-'+cast(@da_y as varchar)) as datetime)试一下。
    第四个错误是因为你少一个return
      

  2.   

    如何改呢? 不明白. 我对SQL里的函数不太熟
      

  3.   

    sql server 本来就有个函数可以取回你要的东西
    dateadd(month,-1,getdate())
      

  4.   

    create function da_te
    returns datetime
    begindeclare @ye_ar int,@mon_th int,@da_y int,@da_te datetime
    set @da_te=convert(varchar(10),getdate(),126)
    set @ye_ar=year(@da_te)
    set @mon_th=month(@da_te)
    set @da_y=day(@da_te)if @da_y<25
      begin
         if month(@da_te)=1
           begin
               set @ye_ar=@ye_ar-1
               set @mon_th=12
               set @da_y=25
           end
         else
           begin           
               set @mon_th=@mon_th-1
               set @da_y=25
           end
      end
    else
      begin
           set @da_y=25
      endset @da_te=select cast((cast(@ye_ar as varchar)+'-'+cast(@mon_th as varchar)+'-'+cast(@da_y as varchar)) as datetime)
    return @date
      

  5.   

    楼上的朋友谢谢了, 可还是不行, 错误信息: 服务器: 消息 170,级别 15,状态 1,过程 da_te,行 2
    第 2 行: 'returns' 附近有语法错误。
    服务器: 消息 443,级别 16,状态 1,过程 da_te,行 6
    在函数内不正确地使用了 'getdate'。
    服务器: 消息 156,级别 15,状态 1,过程 da_te,行 30
    在关键字 'select' 附近有语法错误。
    服务器: 消息 137,级别 15,状态 1,过程 da_te,行 31
    必须声明变量 '@date'。
      

  6.   

    create function da_te(@date datetime)
    returns varchar(10)
    begindeclare @ye_ar int,@mon_th int,@da_y int,@da_te varchar(20)
    set @da_te=convert(varchar(10),@date,126)
    set @ye_ar=year(@da_te)
    set @mon_th=month(@da_te)
    set @da_y=day(@da_te)if @da_y<25
      begin
         if month(@da_te)=1
           begin
               set @ye_ar=@ye_ar-1
               set @mon_th=12
               set @da_y=25
           end
         else
           begin           
               set @mon_th=@mon_th-1
               set @da_y=25
           end
      end
    else
      begin
           set @da_y=25
      endset @da_te=(cast(@ye_ar as varchar)+'-'+cast(@mon_th as varchar)+'-'+cast(@da_y as varchar)) 
    return (@da_te)
    end
      

  7.   

    函数里面有很多限制的啊,比如有很多的语句就不可以使用的,还有在书写方面不要和其他语言向混淆,最后一句必须是return 等,要仔细看清楚哦。
      

  8.   

    明白一些了, 在这句里
    set @da_te=convert(varchar(10),@date,126)
    那个 @date 就起到了 getdate() 的作用? 是不是只要在一开始处将 @date 设为 datetime 它就可以自动起到这个作用呢? 这句不是很明白.谢谢大家了.
      

  9.   

    在你用这个函数的时候
    select dbo.da_te(getdate()) 就可以了