算术溢出错误转换数字数据类型为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; 
+0

为什么会出现OP需要改变从NUMERIC声明( 6,2)至(8,2)? – DeanOC 2014-11-04 03:52:26

+0

在NUMERIC(6,2)中使用(精度= 6) 将存储的最大小数位总数,小数点的左侧和右侧。所以精度必须提高。 – 2014-11-04 03:57:42

+0

没有任何迹象表明MAX(TotalPrice)超过NUMERIC(6,2)。 – DeanOC 2014-11-04 04:10:48

你的问题是,“数字(6,2)”有高达6个位数,再加上(取决于您身在何处或逗号),小数点。所以你需要'VARCHAR(7)'而不是6来迎合这个。