web-dev-qa-db-fra.com

Conversion de la valeur Varchar en valeur entière/décimale dans SQL Server

Comment convertir la valeur des enregistrements dans une table du type de données varchar en integer ou decimal afin que je puisse obtenir la somme de la valeur. J'utilise SQL Server 2005.

Dites que j'ai une structure de table comme celle-ci:

ID int
Stuff varchar

et les records

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

Maintenant, je veux obtenir le total de la colonne Stuff:

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

Mais ça ne marche pas. S'il vous plaît besoin d'aide!

5
Philips Tel

Structure de la table ... très basique:

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');

Question:

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

Ou essayez ceci:

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

Travailler sur SQLServer 2008

8
Hackerman

Vous obtenez un dépassement arithmétique. cela signifie que vous essayez de rendre impossible une conversion. Cette erreur est générée lorsque vous essayez d'effectuer une conversion et que le type de données de destination n'est pas suffisant pour convertir les données Origin. Par exemple:

Si vous essayez de convertir 100,52 en décimal (4,2), vous obtiendrez cette erreur. Le nombre 100.52 nécessite 5 positions et 2 d’entre elles sont décimales. 

Essayez de changer la précision décimale à quelque chose comme 16,2 ou plus. Essayez avec quelques enregistrements d'abord, puis utilisez-le pour tous vos choix.

2
Jose Areas

La raison en est peut-être que la somme a dépassé le nombre requis de chiffres - 4. Si vous augmentez la taille de la virgule décimale à decimal(10,2), cela devrait fonctionner

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

OR

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

Vous pouvez l'utiliser sans lancer tel que:

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

Ou jetez-le en décimal:

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

SQLFiddle

MODIFIER

Pour SQL Server, vous pouvez utiliser:

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

SQLFiddle

0
Jon