第一个错误是因为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
如何改呢? 不明白. 我对SQL里的函数不太熟
sql server 本来就有个函数可以取回你要的东西 dateadd(month,-1,getdate())
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
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
第二个错误是因为不正确的定义了da_te的类型
第三个错误是因为可能是因为你语法错误,改成
set @da_te=cast((cast(@ye_ar as varchar)+'-'+cast(@mon_th as varchar)+'-'+cast(@da_y as varchar)) as datetime)试一下。
第四个错误是因为你少一个return
dateadd(month,-1,getdate())
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
第 2 行: 'returns' 附近有语法错误。
服务器: 消息 443,级别 16,状态 1,过程 da_te,行 6
在函数内不正确地使用了 'getdate'。
服务器: 消息 156,级别 15,状态 1,过程 da_te,行 30
在关键字 'select' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,过程 da_te,行 31
必须声明变量 '@date'。
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
set @da_te=convert(varchar(10),@date,126)
那个 @date 就起到了 getdate() 的作用? 是不是只要在一开始处将 @date 设为 datetime 它就可以自动起到这个作用呢? 这句不是很明白.谢谢大家了.
select dbo.da_te(getdate()) 就可以了