2013-04-25 139 views
5

如何將數據類型爲varchar的表中的記錄值轉換爲integerdecimal以便我可以獲取該值的總和。我使用SQL Server 2005在SQL Server中將Varchar值轉換爲整數/十進制值

說,我有表的結構是這樣的:

ID int 
Stuff varchar 

和記錄

ID = 1, Stuff = 32.43 
ID = 2, Stuff = 43.33 
ID = 3, Stuff = 23.22 

現在我想獲得總列東西:

SELECT SUM(convert(decimal(4,2), Stuff)) as result FROM table 

但不起作用。請幫助!

+0

您是否收到任何錯誤?嘗試在沒有首先聚合的情況下運行 – 2013-04-25 00:38:25

+0

仍然不起作用。 Msg 102, 錯誤:將varchar轉換爲數據類型數值的算術溢出錯誤。 – 2013-04-25 00:45:27

回答

8

表結構...很基本:

create table tabla(ID int, Stuff varchar (50)); 

insert into tabla values(1, '32.43'); 
insert into tabla values(2, '43.33'); 
insert into tabla values(3, '23.22'); 

查詢:

SELECT SUM(cast(Stuff as decimal(4,2))) as result FROM tabla 

或者,試試這個:

SELECT SUM(cast(isnull(Stuff,0) as decimal(12,2))) as result FROM tabla 

於2008年的SQLServer工作

+0

我相信OP有超過那3條記錄 – codingbiz 2013-04-25 00:56:18

+0

我根據用戶提出的示例數據做了測試 – Hackerman 2013-04-25 00:57:28

+0

仍然不能在sql server 2005中工作:「算術溢出錯誤將varchar轉換爲數據類型數字。」 – 2013-04-25 01:02:37

0

您可以使用它,而鑄造如:

select sum(`stuff`) as mySum from test; 

或者將它轉換爲十進制:

select sum(cast(`stuff` as decimal(4,2))) as mySum from test; 

SQLFiddle

編輯

對於SQL Server,你可以使用:

select sum(cast(stuff as decimal(5,2))) as mySum from test; 

SQLFiddle

+0

第一個選項產生錯誤:操作數數據類型varchar對求和操作符無效。 第二個選項會生成錯誤:將數據類型varchar轉換爲數字時出錯。 – 2013-04-25 00:49:51

+0

我對此表示歉意,您標記爲'mysql',這就是我在測試中所做的。 – Jon 2013-04-25 00:50:37

+0

@PhilipsTel通過示例將SQL小提琴更新爲MS SQL Server。 – Jon 2013-04-25 00:56:53

1

的原因可能是總和超過所需的位數 - 4.如果您增加小數的大小decimal(10,2),它應該工作

SELECT SUM(convert(decimal(10,2), Stuff)) as result FROM table 

OR

SELECT SUM(CAST(Stuff AS decimal(6,2))) as result FROM table 
2

你得到算術溢出。這意味着您正試圖進行無法完成的轉​​換。當您嘗試進行轉換並且命令數據類型不足以轉換原始數據時,會引發此錯誤。例如:

如果您嘗試將100.52轉換爲十進制(4,2),將會出現此錯誤。數字100.52需要5個位置,其中2個是十進制數。

嘗試將小數精度更改爲16.2或更高。先用少量記錄試試,然後將其用於所有選擇。

相關問題