我有这个功能,它应该会给我发票的月末日期。
E.g。发票(ARID)的创建日期为2015-09-1,eom为2015-09-30。
ALTER FUNCTION [dbo].[sfEOM](@ARID int, @Switch int)
RETURNS date
AS
BEGIN
declare @Letzter date
declare @MaxLeistungsdatum as date
if @Switch=1
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
else
set @MaxLeistungsdatum=(select max(LeistungsDatum) from tblDatensaetzeBA where ARID=@ARID group by ARID)
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,@MaxLeistungsdatum),30),0))
RETURN @Letzter
END
go
对两个不同的表使用一个函数我用作@Switch
但
select dbo.sfEOM(9307396,1)
或
select dbo.sfEOM(9307396,2)
在
中将NULL作为结果select CONVERT(date, DATEADD(MONTH,DATEDIFF (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID9307396 group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0)
带来正确的日期。
如果省略@ Switch = 1并且只有
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
它也有效。
那里有什么不对? 谢谢! 迈克尔
答案 0 :(得分:2)
您需要为if
语句定义代码块:
ALTER FUNCTION [dbo].[sfEOM](@ARID int, @Switch int)
RETURNS date
AS
BEGIN
declare @Letzter date
declare @MaxLeistungsdatum as date
if @Switch = 1
begin
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
end
else
begin
set @MaxLeistungsdatum=(select max(LeistungsDatum) from tblDatensaetzeBA where ARID=@ARID group by ARID)
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,@MaxLeistungsdatum),30),0))
end
return @Letzter
end;
去