我发现了许多类似的帖子,但由于某种原因,我仍然无法让我的SQL脚本工作....
我想要做的是在2个日期之间取DATEFIFF
并在2 ...之间获得DAYS ...
然后将其转换为int
,这样我就可以用它做一些简单的数学运算......
这是我的代码看起来像......
'setting the vars
set @vendor = '%%'
set @sku = '%%'
set @startdate = '12-12-1900'
set @enddate = '12-12-2020'
set @dateDIFF = DATEDIFF(DAY,@startdate,@enddate)
select
count(*) as [count]
,[inventory].[ParentSKU]
, @dateDIFF as [days left]
,(sum([Inventory].[QOH]) -count(*)) * @datediff
,sum ([inventory].[QOH])
from
[order details]
join
[inventory] on [order details].[sku] = [inventory].[localsku]
where
[order details].[SKU] like @sku
and [Order Details].[DateShipped] between @startdate and @enddate
and [Inventory].[text1] like @vendor
group by
[Inventory].[ParentSKU]
order by
[count] desc
但无论我尝试什么,我总会得到......
Msg 8115,Level 16,State 2,Line 16
将表达式转换为数据类型int的算术溢出错误。
答案 0 :(得分:2)
您的datediff
表达跨越了一个多世纪,恰好是43830天。
最大整数是2,147,483,647。这意味着当(sum([Inventory].[QOH]) - count(*))
大于约48,995时,您将获得算术溢出。我的猜测是这就是问题所在。
您可以通过以浮点类型或bigint
进行算术来解决此问题。