减去长度大于18位的数字

时间:2014-08-27 08:18:23

标签: c++ sql-server numbers hex

好的,这是一个艰难的,或者是一个愚蠢的,但它让我难过。我正在使用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?

任何意见或建议非常感谢,感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

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

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