Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric  [new]
mnbvcx
Member

Откуда:
Сообщений: 189
Написал простой селект, в котором, в частности

,sum(case when T.ID = 1 then d.A  * D.Price else 0 end) -- РЕПО обратные
,sum(case when T.ID = 2 then d.A * D.Price  else 0 end) -- РЕПО прямые
--Сообщение 8115, уровень 16, состояние 1, строка 25
--Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.


Поле Price Decimal (20,10), A - money.

Что делать?
20 июн 19, 11:47    [21912093]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric  [new]
Badger
Member

Откуда: Москва
Сообщений: 238
mnbvcx,

Convert (Decimal (20,10), sum(case when T.ID = 2 then d.A * D.Price else 0 end))

Думаю это вам поможет
20 июн 19, 12:06    [21912115]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric  [new]
mnbvcx
Member

Откуда:
Сообщений: 189
Badger
mnbvcx,

Convert (Decimal (20,10), sum(case when T.ID = 2 then d.A * D.Price else 0 end))

Думаю это вам поможет

к сожалению, не помогло - та же ошибка(

В итоге сделал так
sum(case when T.ID = 2 then d.A * cast(D.Price as float)  else 0 end)

но это, наверное, не очень хорошо - копейки какие-нибудь могут исказиться?
20 июн 19, 15:21    [21912299]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Надо не к float конвертить, а к decimal, чтобы результирующее значение влезло в результрующую точночть: https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-2017

Сообщение было отредактировано: 20 июн 19, 15:30
20 июн 19, 15:30    [21912302]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric  [new]
nullin
Member

Откуда: pullin
Сообщений: 131
decimal(35, 10)

select X."ID", X."A", X."Price"
     , convert(decimal(35, 10), X."A" * X."Price") as "Result"

   from (values (2
               , convert(decimal(20, 10), -9999999999.9999999999)
               , convert(decimal(19, 4), (-1.0 - convert(bigint, convert(varbinary(18), '0x7FFFFFFFFFFFFFFF', 1), 1)) / 10000))) as X("ID", "A", "Price")
20 июн 19, 16:50    [21912371]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить