Как CAST тип данных INT как тип данных BIGINT? - PullRequest
0 голосов
/ 14 сентября 2018

Кто-то предположил, что причина, по которой я получаю ошибку

Ошибка арифметического переполнения при преобразовании nvarchar в числовой тип данных

когда выполняется какой-то код, потому что мне нужно преобразовать тип данных INT одной из моих переменных в тип данных BIGINT.

Кто-нибудь знает, как это сделать? Я пробовал код ниже, но он не работал!

ТИА

    select
    es.ClientProductID,
    es.ProductName,
    ash.sales,
    CAST(ash.sales AS BIGINT) * CAST(ash.price as BIGINT) AS CashSales,
    ash.price,
    ash.cost,
    ash.date
from AggregatedSalesHistory as ash
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSID
join PriceZone as pz on pz.PriceZoneID = ash.PriceZoneID 

where 
    es.DepartmentName = 'Dairy' 
    and ash.segmentid = 0
    and pz.Name = 'South' 
    and ash.date >= '2014-1-1' and ash.Date<='2014-12-24'
    and (es.ClientProductID = 7119508806 
    or es.ClientProductID = 7119502372 
    or es.ClientProductID = 7003836538 
    or es.ClientProductID = 7119502437
    or es.ClientProductID = 2500002694
    or es.ClientProductID = 2500002606
    or es.ClientProductID = 7003836540
    or es.ClientProductID = 2500005433
    or es.ClientProductID = 2500005542
    or es.ClientProductID = 2500002893);

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вам не хватает левой пары.

CAST(ash.sales * ash.price) as BIGINT) AS CashSales, должно быть

CAST((ash.sales * ash.price) as BIGINT) AS CashSales,

Arithmetic overflow error converting nvarchar to data type numeric

Кроме того, одно из ваших полей не является числовым. Вы не опубликовали структуру, поэтому я не могу сказать, какая именно.

0 голосов
/ 14 сентября 2018

Умножение двух int s приведет к int, после чего ваш результат уже будет переполнен.Вы должны выполнить приведение перед умножением:

CAST(ash.sales AS BIGINT) * CAST(ash.price as BIGINT) AS CashSales
...