2014-11-24 91 views
0

我已经创建了下面的函数,并且它似乎随机将@FCST和@QTY值更改为随机选择。下面是调试中返回错误值为@FCST的程序示例。由于@FCST在9.53,我预计它会返回9.53。 enter image description hereSQL函数 - 将变量设置为随机值

CREATE FUNCTION dbo.LTBADJ 
(@MAT VARCHAR(30),@LCUT DATE, @QS DATE,@STAT FLOAT, @MCA FLOAT) 
RETURNS FLOAT 
AS BEGIN 
DECLARE @HD DATE 
DECLARE @ED DATE 
DECLARE @FCST FLOAT 
DECLARE @QTY FLOAT 
DECLARE @YRS FLOAT 

SET @ED = 
(SELECT TOP 1 [EO_END_DATE] FROM [dbo].[EO_LTB] 
WHERE [W_PART_NUMBER] = @MAT 
AND [APPROVED_DATE] <= @LCUT 
ORDER BY [EO_END_DATE] DESC) 
SET @HD =DATEADD(YEAR,2,@QS) 
SET @FCST = (CASE WHEN @MCA <= @STAT THEN @MCA ELSE @STAT END) 
SET @FCST = (CASE WHEN @FCST <.5 THEN .5 ELSE @FCST END) 
SET @YRS = (DATEDIFF(DAY,@HD,@ED) + 730)/365 
SET @QTY = @FCST * @YRS 
SET @QTY = (CASE WHEN @ED<[email protected] THEN 0 ELSE @QTY END) 
RETURN @QTY 
END ; 

编辑:@QTY的实例计算错误 enter image description here

+1

嗯...这不是'9.53' ..这'9.53×10^-2' ='9.53 X 0.01' ..这是0.0953 – 2014-11-24 21:52:09

+0

并且结果是'5×10^-1' ='5 x 0.1' ='0.5' ..这就是你指定它的时候少于0.5 – 2014-11-24 21:53:50

+0

在你的更新中,QTY是'21.345 +'..应该是什么? – 2014-11-24 21:58:41

回答

1

所有似乎是正确的 - 你可以看到发生了什么事情通过运行下面的SQL。 我怀疑数字结尾处的混淆是e-002e-001;这只是SQL试图显示浮动值;由于浮点运算是如何工作的,一些数字会从你期望的中稍微计算出来,然后为了使它们可读,SQL将显示带有指数的数字。

declare @MAT VARCHAR(30) = '50309120000W' 
,@LCUT DATE = '2014-10-26' 
, @QS DATE = '2014-10-27' 
,@STAT FLOAT = 9.5399999999999999e-002 
, @MCA FLOAT = 9.5399999999999999e-002 


DECLARE @HD DATE 
DECLARE @ED DATE 
DECLARE @FCST FLOAT 
DECLARE @QTY FLOAT 
DECLARE @YRS FLOAT 

SET @ED = 
(
    SELECT TOP 1 [EO_END_DATE] 
    FROM (SELECT '2019-02-28' [EO_END_DATE], @MAT [W_PART_NUMBER], @LCUT [APPROVED_DATE]) X 
    WHERE [W_PART_NUMBER] = @MAT 
    AND [APPROVED_DATE] <= @LCUT 
    ORDER BY [EO_END_DATE] DESC 
) 
SET @HD =DATEADD(YEAR,2,@QS) 


SET @FCST = (CASE WHEN @MCA <= @STAT THEN @MCA ELSE @STAT END) 
SELECT @FCST 

SET @FCST = (CASE WHEN @FCST <.5 THEN .5 ELSE @FCST END) 
SELECT @FCST 

SET @YRS = (DATEDIFF(DAY,@HD,@ED) + 730)/365 
SET @QTY = @FCST * @YRS 
SELECT @FCST, @YRS, @QTY 

SET @QTY = (CASE WHEN @ED<[email protected] THEN 0 ELSE @QTY END) 
SELECT @QTY, @ED, @HD 
+0

所以是的,我错误地阅读了花车的价值。谢谢。 – 2014-11-24 22:35:31