2013-04-25 10 views
5

Come convertire il valore dei record in una tabella con il tipo di dati varchar in integer o decimal in modo che sia possibile ottenere la somma del valore. Io uso SQL Server 2005.Conversione del valore Varchar in intero/valore decimale in SQL Server

Dire che ho struttura della tabella come questa:

ID int 
Stuff varchar 

e le registrazioni

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

Ora voglio ottenere il totale della colonna Stuff:

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

Ma non funziona Per favore hai bisogno di aiuto!

+0

Hai ricevuto qualche errore?Prova a eseguire senza prima l'aggregazione –

+0

Ancora non funziona. Messaggio 102, errore: errore di overflow aritmetico che converte varchar nel tipo di dati numerico. –

risposta

8

Struttura tabella ... molto semplice:

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

Query:

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

Oppure, provate questo:

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

Lavorare su SQLServer 2008

+0

Credo che l'OP abbia più di quei 3 record – codingbiz

+0

Ho eseguito il test sulla base dei dati campione proposti dall'utente – Hackerman

+0

Ancora non funziona in sql server 2005: "Errore di overflow aritmetico che converte varchar in tipo di dati numerico". –

0

È possibile usarlo senza colata come ad esempio:

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

O cast in decimale:

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

SQLFiddle

EDIT

Per SQL Server, è può usare:

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

SQLFiddle

+0

Prima opzione genera errore: Operando il tipo di dati varchar non è valido per l'operatore somma. Seconda opzione genera errore: Errore nella conversione del tipo di dati varchar in numerico. –

+0

Mi scuso, mi hai taggato come 'mysql', quindi è quello che ho fatto il test. – Jon

+0

@PhilipsTel Aggiornamento del violino SQL su MS SQL Server con esempio. – Jon

1

Il motivo potrebbe essere che la somma ha superato il numero di cifre - 4. Se si aumenta la dimensione del decimale per decimal(10,2), dovrebbe funzionare

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

O

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

Hai trovato overflow aritmetico. questo significa che stai cercando di rendere impossibile una conversione. Questo errore viene generato quando si tenta di effettuare una conversione e il tipo di dati del destino non è sufficiente per convertire i dati di origine. Ad esempio:

Se si tenta di convertire 100.52 in decimale (4,2) si otterrà questo errore. Il numero 100.52 richiede 5 posizioni e 2 di esse sono decimali.

Provare a modificare la precisione decimale a qualcosa come 16,2 o superiore. Prova prima con pochi record e poi usalo per tutte le tue selezioni.

Problemi correlati