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-Key: 397714

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

Printed on: April 25, 2024 at 00:04 o'clock

Member: sabines
Solution sabines Jan 10, 2019 at 06:28:24 (UTC)
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
Member: Volchy
Solution Volchy Jan 10, 2019 at 06:34:01 (UTC)
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
Member: Schniefnase
Schniefnase Jan 10, 2019 updated at 13:41:15 (UTC)
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.
Member: ukulele-7
Solution ukulele-7 Jan 10, 2019 at 15:20:16 (UTC)
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
Member: Schniefnase
Schniefnase Jan 11, 2019 at 05:49:02 (UTC)
Goto Top
Hat zwar so hingehauen (diesmal) - aber der Tipp ist sicher Gold wert!