发生算术溢出

时间:2017-01-08 22:37:28

标签: sql tsql sybase integer-overflow bigint

我试图在Sybase 15.5中运行以下语句,但我收到“发生算术溢出”错误:

declare @TradeId BIGINT
select @TradeId=(20170103-19950000)*10000
select @TradeId

请告知任何我做错的事。

3 个答案:

答案 0 :(得分:1)

表达式中常量的数据类型由其值决定。由于所有谓词似乎都是简单的INT,因此DBE使用INT来存储它们。

明确地将其中一个或全部投射到BIGINT。

答案 1 :(得分:0)

假设19950000是INT,这就是您收到错误消息的原因。像这样明确地将它投射到BIGINT:

declare @TradeId BIGINT
select @TradeId=(20170103-CAST(19950000 AS BIGINT))*10000
select @TradeId

答案 2 :(得分:0)

@TradeId足够大(BIGINT绰绰有余),但是常量被错误地解释为INTEGER,并且Sybase期望结果也是一个整数,该整数太小,因此会引起溢出。

declare @TradeId BIGINT
declare @D1 BIGINT
declare @D2 BIGINT

select @D1 = 20170103
select @D2 = 19950000

select @TradeId=(@D1 - @D2 )*10000
select @TradeId

应该工作。

您还可以保留当前表达式并内联CAST。