2014-11-04 2 views
0

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

SELECT '$' 
     + CONVERT(VARCHAR (6), Cast(Avg(TotalPrice) AS NUMERIC (6, 2))) AS 'Average Price', 
     '$' 
     + CONVERT(VARCHAR (6), Cast(Min(TotalPrice) AS NUMERIC (6, 2))) AS 'Minimum Price', 
     '$' 
     + CONVERT(VARCHAR (6), Cast(Max(TotalPrice) AS NUMERIC (6, 2))) AS 'Maximum Price' 
FROM Invoice; 

Колонка AVG и MIN столбца работают нормально, но возвращает столбец MAX:

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

И я не уверен, почему я получаю сообщение об ошибке.

ответ

1

ЧИСЛЕННЫЙ (6,2) обозначает всего 6 цифр и из которых 2 являются десятичными знаками.

у вас есть значение, как 1234.66, то общих символов, необходимых 7

Получите максимальное значение и использовать соответствующий размер VARCHAR, здесь вам нужно по крайней мере varchar(7)

1

Попробуйте

SELECT '$' 
     + CONVERT(VARCHAR (10), Cast(Avg(TotalPrice) AS NUMERIC (8, 2))) AS 'Average Price', 
     '$' 
     + CONVERT(VARCHAR (10), Cast(Min(TotalPrice) AS NUMERIC (8, 2))) AS 'Minimum Price', 
     '$' 
     + CONVERT(VARCHAR (10), Cast(Max(TotalPrice) AS NUMERIC (8, 2))) AS 'Maximum Price' 
FROM Invoice; 
+0

Почему потребность OP изменить NUMERIC заявление от (6,2) - (8,2)? – DeanOC

+0

Beacuse in NUMERIC (6, 2) (precision = 6) Максимальное общее количество десятичных цифр, которое будет храниться как слева, так и справа от десятичной точки. поэтому точность должна увеличиться. –

+0

Нет никаких признаков того, что MAX (TotalPrice) превышает ЧИСЛЕННЫЙ (6,2). – DeanOC

1

Ваша проблема в том, что «Числовой (6,2)» имеет до 6 цифр, плюс десятичная точка (или запятая в зависимости от того, где вы находитесь). Поэтому вам понадобится «VARCHAR (7)» вместо 6, чтобы удовлетворить это.

Смежные вопросы

 Смежные вопросы