所以,这是我的问题:
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的算术溢出错误”
而且我不确定为什么会收到错误。
答案 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)