将数值转换为数据类型varchar的算术溢出错误

时间:2014-11-04 03:46:05

标签: sql sql-server

所以,这是我的问题:

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的算术溢出错误”

而且我不确定为什么会收到错误。

3 个答案:

答案 0 :(得分: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; 

答案 1 :(得分:1)

您的问题是'数字(6,2)'最多有6位数字加上小数点(或逗号取决于您所在的位置)。因此,您需要使用'VARCHAR(7)'而不是6来满足此要求。

答案 2 :(得分:1)

NUMERIC(6,2)表示总共6位数,其中2位是小数位。

你有一个像1234.66的值,那么所需的总字符数是7

获取最大值并使用适当的varchar大小,此处至少需要varchar(7)