【问题标题】:Converting Days to Int SQL将天数转换为 Int SQL
【发布时间】:2014-01-10 21:39:08
【问题描述】:

我找到了很多类似的帖子,但由于某种原因,我仍然无法让我的 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

但无论我尝试什么,我总是得到......

消息 8115,第 16 级,状态 2,第 16 行
将表达式转换为数据类型 int 的算术溢出错误。

【问题讨论】:

  • @dateDIFF 的类型是什么。应该是work fine
  • 你的表中的列和变量的数据类型是什么?此外,您应该对日期常量本身使用 ANSI 标准表示法(YYYY-MM-DD 或 YYYYMMDD)。

标签: asp.net sql type-conversion


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2018-10-03
    • 2011-05-22
    • 2020-10-14
    相关资源
    最近更新 更多