我试图在Sybase 15.5中运行以下语句,但我收到“发生算术溢出”错误:
declare @TradeId BIGINT
select @TradeId=(20170103-19950000)*10000
select @TradeId
请告知任何我做错的事。
答案 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。