5

値の合計を取得できるようにvarcharintegerデータ型のテーブル内のレコードの値を変換する方法。decimal私は使用しますSQL Server 2005

次のようなテーブル構造があるとします。

ID int
Stuff varchar

そして記録

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

ここで、列 Stuff の合計を取得したいと思います。

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

しかし、うまくいきません。助けが必要です!

4

4 に答える 4

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

SQLServer 2008 での作業

于 2013-04-25T00:55:35.397 に答える
2

算術オーバーフローが発生しています。これは、変換を不可能にしようとしていることを意味します。このエラーは、変換を試みたときに、destiny データ型が元のデータを変換するのに十分でない場合にスローされます。例えば:

100.52 を decimal(4,2) に変換しようとすると、このエラーが発生します。数値 100.52 には 5 つの桁が必要で、そのうちの 2 つは小数です。

小数の精度を 16.2 以上に変更してみてください。最初にいくつかのレコードで試してから、それをすべての選択に使用してください。

于 2013-04-25T01:30:01.663 に答える
1

その理由は、合計が必要な桁数 - 4 を超えた可能性があります。小数のサイズを に増やすとdecimal(10,2)、機能するはずです

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

また

 SELECT SUM(CAST(Stuff AS decimal(6,2))) as result FROM table
于 2013-04-25T00:54:39.137 に答える
0

次のようにキャストせずに使用できます。

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

または、10 進数にキャストします。

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

SQLフィドル

編集

SQL Server の場合、次を使用できます。

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

SQLフィドル

于 2013-04-25T00:44:58.377 に答える