Sql 发生算术溢出

Sql 发生算术溢出,sql,tsql,sybase,integer-overflow,bigint,Sql,Tsql,Sybase,Integer Overflow,Bigint,我试图在Sybase 15.5中运行以下语句,但出现“算术溢出”错误: 请告知我做错了什么。表达式中常量的数据类型由其值决定。由于所有谓词似乎都是简单的INT,因此DBE使用INT来存储它们 将其中一个或全部显式转换为BIGINT。假定19950000为INT,这就是为什么会收到错误消息的原因。显式地将其强制转换为BIGINT,如下所示: declare @TradeId BIGINT select @TradeId=(20170103-CAST(19950000 AS BIGINT))*100

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


请告知我做错了什么。

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


将其中一个或全部显式转换为BIGINT。

假定19950000为INT,这就是为什么会收到错误消息的原因。显式地将其强制转换为BIGINT,如下所示:

declare @TradeId BIGINT
select @TradeId=(20170103-CAST(19950000 AS BIGINT))*10000
select @TradeId
@TradeId足够大(BIGINT就足够了),但是这些常量被错误地解释为整数,Sybase希望结果也是一个整数,这太小了,所以会出现溢出

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

select @D1 = 20170103
select @D2 = 19950000

select @TradeId=(@D1 - @D2 )*10000
select @TradeId
应该有用

您还可以保留当前表达式并进行内联强制转换

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

select @D1 = 20170103
select @D2 = 19950000

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