2014-08-27 21 views
0

好吧,這是一個艱難的或者是一個愚蠢的,但它讓我難倒了。我正在使用MSSQL中的序列號,並將它們作爲nvarchar(50)存儲在數據庫中,並對它們進行減法計算。我使用以下查詢將它們轉換爲數據類型BIGINT並按正常方式進行減法。減去長度大於18位的數字

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

BIGINT只是一個正常的64位整數。它是而不是的任意精度整數。

如果要存儲更多信息,可以將其保存爲字符串形式,也可以使用NUMERICDECIMAL類型;這兩種解決方案當然比原生的固定寬度整數慢得多。

+0

Hi @Kerrek SB,它作爲一個字符串存儲在數據庫中,但我需要從每個序列中減去每個序列以查看範圍是什麼。如果我有一個像「12345678998745632145」這樣的長度爲20位的序列,而另一個像「12345632145236578941」,我不能將它們相減,因爲我無法將它們轉換爲合適的數據類型或數字格式 – OMUIRI 2014-08-27 08:33:19

+0

@OMUIRI:您可以將它們轉換爲'NUMERIC'。 – 2014-08-27 08:39:40

+0

@OMUIRI你可以通過將數字放入鏈表來減去兩個鏈表,並將結果以鏈表形式返回。 – instance 2014-08-27 08:49:48