2013-04-25 21 views
5

Jak przekonwertować wartość rekordów w tabeli na typ danych varchar na integer lub decimal, aby uzyskać sumę wartości. Używam SQL Server 2005.Konwersja wartości Varchar do liczby całkowitej/wartości dziesiętnej w SQL Server

powiedzieć, że mam strukturę tabeli tak:

ID int 
Stuff varchar 

i rekordy

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

Teraz chcę uzyskać sumę kolumny treści:

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

ale nie działa. Potrzebuję pomocy!

+0

Czy otrzymujesz błąd?Spróbuj uruchomić bez agregacji najpierw. –

+0

Nadal nie działa. Msg 102, error: Błąd przepełnienia arytmetycznego konwertujący varchar na typ danych liczbowych. –

Odpowiedz

8

Struktura stołu ... bardzo prosta:

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

Zapytanie:

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

Lub spróbuj tego:

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

Praca na SQLServer 2008

+0

Wierzę, że OP ma więcej niż te 3 rekordy. – codingbiz

+0

Wykonałem test na podstawie przykładowych danych zaproponowanych przez użytkownika. – Hackerman

+0

Nadal nie działa na serwerze sql 2005: "Błąd przepełnienia arytmetycznego konwertujący varchar na typ danych liczbowych." –

0

Można go używać bez rzucania takich jak:

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

Albo rzucić go na dziesiętny:

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

SQLFiddle

EDIT

Dla SQL Server, można użyć:

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

SQLFiddle

+0

Pierwsza opcja generuje błąd: Typ danych typu Operand varchar jest niepoprawny dla operatora sumy. Druga opcja generuje błąd: Błąd podczas konwersji typu danych varchar na numeryczny. –

+0

Przepraszam, zostałeś oznaczony jako 'mysql', więc to właśnie zrobiłem test. – Jon

+0

@PhilipsTel Zaktualizowano skrzypce SQL do MS SQL Server z przykładem. – Jon

1

Powodem może być to, że podsumowanie przekroczyły wymaganą liczbę cyfr - 4. Jeśli zwiększyć rozmiar po przecinku do decimal(10,2), to powinno działać

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

Otrzymujesz przepełnienie. oznacza to, że próbujesz uniemożliwić dokonanie konwersji. Ten błąd jest zgłaszany podczas próby dokonania konwersji, a typ danych przeznaczenia nie jest wystarczający do konwersji danych źródłowych. Na przykład:

Jeśli spróbujesz przekonwertować 100.52 na dziesiętny (4,2), otrzymasz ten błąd. Liczba 100.52 wymaga 5 pozycji, a 2 liczby dziesiętne.

Spróbuj zmienić dokładność dziesiętną na około 16,2 lub wyższą. Najpierw wypróbuj kilka rekordów, a następnie użyj go do wszystkich wybranych.

Powiązane problemy