算术溢出错误转换数字数据类型为varchar
问题描述:
所以,这里是我的查询:算术溢出错误转换数字数据类型为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“
而我不知道为什么我得到的错误。
答
NUMERIC(6,2)表示总共6位数字,其中2是小数位数。
你有一个像1234.66需要那么总字符的值是7
得到最大的价值和使用适当的VARCHAR大小,在这里你需要至少在varchar(7)
答
试试这个
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;
答
你的问题是,“数字(6,2)”有高达6个位数,再加上(取决于您身在何处或逗号),小数点。所以你需要'VARCHAR(7)'而不是6来迎合这个。
为什么会出现OP需要改变从NUMERIC声明( 6,2)至(8,2)? – DeanOC 2014-11-04 03:52:26
在NUMERIC(6,2)中使用(精度= 6) 将存储的最大小数位总数,小数点的左侧和右侧。所以精度必须提高。 – 2014-11-04 03:57:42
没有任何迹象表明MAX(TotalPrice)超过NUMERIC(6,2)。 – DeanOC 2014-11-04 04:10:48