schniefnase
Goto Top

MSSQL Frage Konvertierung varchar in summierbaren Wert (decimal?)

Hallo,

ich habe hier einige Tabellen geerbt und bin nicht besonders bewandert in Datenbanken. Ein bisschen gegoogelt habe ich schon - auch einiges gefunden, aber nicht so richtig durchgeblickt. Ich versuche es nochmal hier.

Ich habe eine Tabelle in der varchar Werte gespeichert sind wie z.B. "1.000,00". Also "." als 1000er Trennzeichen und "," als Dezimaltrennzeichen. Es können natürlich auch deutlich höhere Werte sein - aber immer im genannten Format.

Nun soll ich diese Werte summieren.

Grundlage also so was wie:

SELECT SUM(column_name)
FROM table_name
WHERE condition;

Den column_name muss ich jetzt irgendwie Converten und Replacen.

Ich habe mal den hier versucht: CONVERT(numeric(10,2),REPLACE('column_name',',','.'))
Damit bin ich schon nicht wirklich weitergekommen.

Nur was nehme ich da am besten? Numeric? Und wie "Replace" ich am besten? Kann mir da jemand auf die Sprünge helfen, bitte? Danke.

Content-ID: 397714

Url: https://administrator.de/contentid/397714

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

sabines
Lösung sabines 10.01.2019 um 07:28:24 Uhr
Goto Top
Moin,

schau dir das mal an:
https://docs.microsoft.com/de-de/sql/t-sql/functions/cast-and-convert-tr ...

Cast sollte für Deine Zwecke passen, aber Achtung, der Punkt kann Ärger machen.
SELECT CAST(CAST('123.456' as float) as int) sollte das beheben.

Einfach mal durchtesten.

Gruss
Volchy
Lösung Volchy 10.01.2019 um 07:34:01 Uhr
Goto Top
Moin,

Tausendertrenner würde ich im ersten Replace raus nehmen und das Komma durch Punkt ersetzen im zweiten Replace. Dann entsprechend casten:
Probier mal in die Richtung:
select cast(replace(replace('1.000,25','.',''),',','.') as float) as Test

LG
Schniefnase
Schniefnase 10.01.2019 aktualisiert um 14:41:15 Uhr
Goto Top
Erstmal Danke euch beiden. Leider bekomme ich es immer noch nicht hin.

Ich habe mir jetzt nur mal die Spalte gegriffen in der Tabelle - also:

select cast(replace(replace('SpaltennameMitVarCharWert','.',''),',','.') as float)

Leider schmeißt der SQL-Server mir:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to float.

Ich google mal munter weiter - aber falls noch wer Ideen hat...


Edit: Ich bin natürlich doof und darf den Spaltennamen nicht in Hochkomma setzen face-sad Danke. Ich glaube ich bekomme es hin. Ihr habt mir beide sehr geholfen.
ukulele-7
Lösung ukulele-7 10.01.2019 um 16:20:16 Uhr
Goto Top
Das Problem mit so verkorksten Tabellen ist das auch etwas anderes als eine Zahl in deinem VARCHAR stehen kann und dann knallt es, genau wie es durch deine Hochkomma geknallt hat, und die ganze Abfrage scheitert. Je nachdem wer die Daten in die Spalte schreibt (Mensch oder Maschine) solltest du solche Fälle noch abfangen, z.B. mit
WHERE isnumeric(spalte) = 1
Schniefnase
Schniefnase 11.01.2019 um 06:49:02 Uhr
Goto Top
Hat zwar so hingehauen (diesmal) - aber der Tipp ist sicher Gold wert!