Хорошо, это тяжело или глупо, но это меня озадачило. Я работаю с серийными номерами в 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 цифр в длине я получаю ошибку, что числа не могут быть преобразованы в data-type bigint
Msg 8815, Level 16, State 2, Line 2
Arithmetic overflow error converting expression to data type bigint
Есть ли работа с использованием другого типа данных данных типа hexi или что-то в этом роде. Я также использую C++, может быть, я мог бы создать там функцию вместо SQL?
Любые комментарии или предложения с благодарностью, спасибо за чтение.
Hi @Kerrek SB, он хранится в БД в виде строки, но мне нужно вычесть каждый серийный номер из одного другого, чтобы узнать, что такое диапазон. Если у меня есть серийный номер длиной 20 цифр, например «12345678998745632145», а другой - «12345632145236578941», я не могу их вычитать, потому что я не могу преобразовать их в подходящий формат данных или номер – OMUIRI
@OMUIRI: вы можете преобразуйте их оба в 'NUMERIC'. –
@OMUIRI вы можете выполнить вычитание, поместив число в связанном списке и вычтите оба связанных списка и верните результат в виде связанного списка. – instance