将Days转换为Int SQL

时间:2013-12-22 14:34:23

标签: asp.net sql type-conversion

我发现了许多类似的帖子,但由于某种原因,我仍然无法让我的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的算术溢出错误。

1 个答案:

答案 0 :(得分:2)

您的datediff表达跨越了一个多世纪,恰好是43830天。

最大整数是2,147,483,647。这意味着当(sum([Inventory].[QOH]) - count(*))大于约48,995时,您将获得算术溢出。我的猜测是这就是问题所在。

您可以通过以浮点类型或bigint进行算术来解决此问题。