2013-08-27 24 views
0

我已經在我的數據庫存儲這樣的過程:同時通過更大的日期differnce越來越埃羅在SQL

ALTER procedure [dbo].[performance] 
(@startdate nvarchar(100), @enddate nvarchar(100) 
as begin 
    declare @date1 nvarchar(100) = convert(varchar, @startdate+' 00:00:00.000', 120) 

    declare @date2 nvarchar(100) = convert(varchar, @enddate+' 23:59:59.000', 120) 

    set NOCOUNT on; 
    select l.LocName,v.Vtype, SUM(DATEDIFF(MI,t.Paydate,t.DelDate)) as TotalDiff, 
    [dbo].[testfunction](
CONVERT(decimal(10,1), AVG(CONVERT(NUMERIC(18,2), DATEDIFF(SS,t.Paydate,t.DelDate))))) as Average 
    from Transaction_tbl t 
    left join VType_tbl v 
     on t.vtid=v.vtid 
    left join Location_tbl l 
     on t.Locid=l.Locid 
    where t.Locid in 
     (select t1.Locid from Transaction_tbl t1) 
    and dtime between '' + @date1 +'' and ''+ @date2 +'' 
    and Status =5 
    group by v.Vtype,l.LocName,l.Locid order by l.Locid 
end 

我testfunction IKE在此:

ALTER FUNCTION [dbo].[testfunction] (@dec NUMERIC(18, 2)) RETURNS Varchar(50) 
AS 
BEGIN 
DECLARE 
@hour integer, 
     @Mns integer, 
     @second decimal(18,3) 

DECLARE @Average Varchar(50) 
select @hour=CONVERT(int,@dec/60/60) 
SELECT @Mns = convert(int, (@dec/60) - (@hour * 60)); 
select @[email protected] % 60; 

SELECT @Average = 
     convert(varchar(9), convert(int, @hour)) + ':' + 
    right('00' + convert(varchar(2), convert(int, @Mns)), 2) + ':' + 
    right('00' + CONVERT(decimal(10,0), convert(varchar(6), @second)), 6) 
RETURN @Average  

END 

如果我通過開始日期:2013-06 -01和結束日期:2013-08-01然後得到正確的輸出 如果我通過開始日期:2010-06-01和結束日期:2013-08-01(更大的日期差異),然後獲取錯誤:

Arithmetic overflow error converting numeric to data type varchar.

我知道有一些問題,我function.but我不能夠發現什麼是我的功能。如果問題的任何一個請幫我找出

+0

我想用我的功能的問題,,我檢查無功能,到時候工作正常, – user2674855

+0

什麼是DATEDIFF的'結果(SS,t.Paydate,t.DelDate)'使用日期2010- 06-01和2013-08-01(您發佈)? – slavoo

回答

0

試試這個..我覺得你應該@Mns是問題

ALTER FUNCTION [dbo].[testfunction] (@dec NUMERIC(18, 2)) RETURNS Varchar(50) 
AS 
BEGIN 
DECLARE 
@hour decimal(18,2), 
     @Mns decimal(18,2), 
     @second decimal(18,3) 

DECLARE @Average Varchar(50) 
select @hour=CONVERT(int,@dec/60/60) 
SELECT @Mns = convert(int, (@dec/60) - (@hour * 60)); 
select @[email protected] % 60; 

SELECT @Average = 
     convert(varchar(9), convert(int, @hour)) + ':' + 
    right('00' + convert(varchar(8), convert(decimal(18,2), @Mns)), 2) + ':' + 
    right('00' + CONVERT(decimal(10,0), convert(varchar(10), @second)), 6) 
RETURN @Average  

END 
+0

no sir..still得到相同的錯誤 – user2674855

+0

我tryed這個函數,但我得到同樣的錯誤 – user2674855