2014-11-04 110 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

NUMERIC(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 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

1

你的問題是,「數字(6,2)」有高達6個位數,再加上(取決於您身在何處或逗號),小數點。所以你需要'VARCHAR(7)'而不是6來迎合這個。

相關問題