Function SQL函数-变量将自身设置为随机值
我创建了下面的函数,将@FCST和@QTY值更改为随机选择似乎是随机的。下面是调试程序返回@FCST错误值的示例。由于@FCST是9.53,我预计它会返回9.53。 编辑:错误计算@QTY的示例Function SQL函数-变量将自身设置为随机值,function,tsql,variables,Function,Tsql,Variables,我创建了下面的函数,将@FCST和@QTY值更改为随机选择似乎是随机的。下面是调试程序返回@FCST错误值的示例。由于@FCST是9.53,我预计它会返回9.53。 编辑:错误计算@QTY的示例 一切似乎都是正确的-通过运行下面的SQL,您可以看到发生了什么。 我怀疑混淆的是数字末尾的e-002和e-001;这只是SQL试图显示浮点数的值;由于浮点运算的工作原理,一些数字的计算结果与您预期的略有出入,然后为了使它们可读,SQL将显示带有指数的数字 declare @MAT VARCHAR(30
一切似乎都是正确的-通过运行下面的SQL,您可以看到发生了什么。 我怀疑混淆的是数字末尾的e-002和e-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<=@HD THEN 0 ELSE @QTY END)
SELECT @QTY, @ED, @HD
隐马尔可夫模型。。。那不是9.53。。这是9.53 x 10^-2=9.53 x 0.01。。这是0.0953,结果是5x10^-1=5x0.1=0.5。。这就是你在更新中指定的,当它小于0.5时,数量是21.345+。。应该是什么?是的,我读错了浮点数的值。谢谢,所以是的,我读错了浮点数的值。非常感谢。
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<=@HD THEN 0 ELSE @QTY END)
SELECT @QTY, @ED, @HD