SQL: Zeichenketten innerhalb einer Spalte verändern

Dieser Eintrag ist f?r mich formell eine Gedankenst?tze, aber vielleicht hilft sie dem Einen oder Anderen. Mich hat die Suche danach einen halben Abend gekostet.

Hintergrund war, dass in einer alten Datenbank eines Kunden Zahlen (Preise) eingetragen wurden (fragt mich nicht, warum dort kein passender Datentyp genutzt wurde, sondern Text bzw. VarChar), die aber kein Komma als Nachkommastellen hatten, sondern einen Punkt. Ursache hier war eine falsche Einstellung in den Regionaleinstellungen des jeweiligen PCs, welcher die Eintragungen vorgenommen hatte. Diese stand nicht auf Deutschland, sondern auf UK und somit war der Salat vorprogrammiert. Über 400 Einträge in unterschiedlichen Spalten der Tabelle waren verkehrt hinterlegt und das Auswerteprogramm produzierte einfach nur noch M?ll in der Gestalt, dass die eigentlichen Preise mal locker um die 1000er Stelle verrutscht waren. Ja, so kann man mitunter auch seine Bilanzen frisieren – aber Spaß beiseite.

Damit die Daten nicht per Hand in der Tabelle manipuliert und auch kein individuelles Programm, welches den Convert ausf?hren sollte, entwickelt werden musste, suchte ich nach einer Möglichkeit mittels SQL-Statement das ganze zu realisieren. Letztendlich konnte ich das Problem mit folgendem Statement in den Griff bekommen:

UPDATE [TABELLE] SET [SPALTE] = REPLACE([SPALTE], ‚.‘, ‚,‘)

Dieser Befehl ersetzt in der resultierenden Zeichenfolge ein vorhandenen PUNKT zu einem KOMMA. Ebenso könnte man anstelle des Punktes und des Kommatas anderweitige Such- und Ersetzungszeichenketten nutzen. Wichtig ist nur, dass zB. beim SQL 2005 Server eine vorhandene Spalte vom Typ Text erst, wenn möglich, in VarChar umgewandelt wird. Ob dies möglich ist, entscheidet letztendlich der Inhalt.

Das könnte Dich auch interessieren...

2 Antworten

  1. Artanis sagt:

    Solche Spielereien werden erst dann lustig, wenn Zahlen vollständig lokalisiert sind (inkl. Tausendertrennzeichen) und dann bspw. deutsche und englische Zahlen gemeinsam in so einer Spalte vorkommen (1.000,00/1,000.00). Dann kannst Du Dir aussuchen, welche Lokalisierung dabei kaputtgeht. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.