好的,这是一个艰难的过程,或者是一个愚蠢的过程,但这让我感到难过。我正在使用MSSQL中的序列号,它们以nvarchar(50)的形式存储在数据库中,并且要对其进行减法计算,我使用以下查询将其转换为数据类型BIGINT并像往常一样减去。

SELECT
SUM(
CAST(second_Serial_Nb AS BIGINT)-CAST(Serial_Nb AS BIGINT))
FROM [TEST].[dbo].[Serial_Table]
WHERE ID = '3'


此查询对于长度不超过18位的序列号工作正常,但是一旦我将序列号的大小增加到长度为20位,我就会收到错误,即不能将序列号转换为数据类型bigint

Msg 8815, Level 16, State 2, Line 2
Arithmetic overflow error converting expression to data type bigint


是否可以使用hexi之类的其他数字数据类型来解决?我也在使用C ++,也许我可以在那里创建函数而不是SQL?

任何意见或建议,不胜感激,谢谢阅读。

最佳答案

BIGINT只是一个普通的64位整数。它不是一个任意精度的整数。

如果要存储更多信息,可以将其保留为字符串形式,也可以使用NUMERICDECIMAL类型。当然,这两种解决方案都比本地固定宽度整数慢得多。

关于c++ - 减去长度大于18位的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25522162/

10-12 17:05
查看更多