Wie kann man Leerzeichen von rechts in allen Spalten einer Datenbanktabelle auf einmal entfernen?

RaupiRaupe

Neuer Benutzer
Beiträge
3
Guten Morgen,

ich habe zig Datenbanktabellen, in der in vielen Felder Leerzeichen nach dem Eintrag vorhanden sind, z. B. die Datenbanktabelle "Adress"

AdrNrBehördeAnredeNameName2VornameStraßePLZOrt
10Herrn MüllerMax Musterweg 115230 Frankfurt (Oder)
2

1Stadt Musterhausen RechtsamtBerg 1 15230Frankfurt (Oder)

Ich habe damit angefangen, jede Spalte wegen rechts vorhanden Leerzeichen zu trimmen:

Update Adress set AdrNr = rtrim(AdrNr)
Update Adress set Behörde = rtrim(Behörde)
Update Adress set Anrede = rtrim(Anrede)
Update Adress set Name= rtrim(Name)

usw.

Reine Fleißarbeit, aber bei über hundert Datenbanktabellen ist das einfach nur nervig.

Gibt einen Befehl der in der ganzen Datenbanktabelle die rechts vorhandenen Leerzeichen in einem Feld entfernt, ohne dass ich die Spalten angeben muss?

Würde mich freuen, wenn mir geholfen wird.

Gruß RaupiRaupe
 
Werbung:
Mir ist kein solcher Befehl bekannt.
Man müsste eine SP schreiben, die alle (gewünschten) Tabellen durchhechelt und darin wiederum alle Felder trimmt.
Es besteht natürlich die Gefahr, dass man Daten ändert, die man nicht ändern sollte.

Etwas einfacher als eine SP wäre vielleicht auch eine Abfrage, die aus den Systemtabellen mit den Feldnamen einfach Updatestatements generiert.

Geht es dabei nicht nur um viele Tabellen, sondern auch um viele Datensätze, dann müsste man administrativ vielleicht auch entsprechende Bugwellen beim Serverbetrieb und Backup denken.
 
Ich habe damit angefangen, jede Spalte wegen rechts vorhanden Leerzeichen zu trimmen:

Update Adress set AdrNr = rtrim(AdrNr)
Update Adress set Behörde = rtrim(Behörde)
Update Adress set Anrede = rtrim(Anrede)
Update Adress set Name= rtrim(Name)

Kann man zusammenfassen, update adress set adrnr=..., behoerde=..., ... spart MASSIV Einträge im Transaction-Log. Ansonsten: siehe @dabadepdu
 
Du kommst vielleicht ohne "SP" aus.

So kannst Du Deine Spalten abfragen:
Code:
select * from information_schema.columns;

Damit kannst Du eine Abfrage aufbauen, die Update Statements ausgibt. Es ist nicht unüblich, so vorzugehen. Allerdings macht man das nur für einmalige "Aufräumarbeiten" und dergleichen. Also, "so vorgehen" meint, SQL Statements zu generieren, die auf Dictionarydaten beruhen und die ansonsten mit viel Tipparbeit verbunden wären und dank endloser Handarbeit dem Verdacht "menschlichen Versagens" unterliegen.
Alternativer Grund:
Eine Abfrage dieser Art mündet in einer Liste von expliziten Statements.
Diese Liste wird überprüft und am Ende vollständig oder selektiv ausgeführt.
Jedenfalls ist das finale Statemente bzw. Script, also die Sammlung von Befehlen, eine nachvollziebare Sache. Das ist ein fundamentaler Unterschied zu einer interaktiven Sitzung an irgendeinem Admin Tool oder eben der bereits genannten manuellen Tipparbeit.

Code:
SELECT
       'Update '+ table_name +
       ' set '+string_agg( column_name+'= rtrim('+column_name+')', ', ')
       as Das_sind_die_Update_Statements
  from information_schema.columns
 where data_type in ( 'character varying', 'text')

Hier ist eine Demo:
 
Werbung:
Zurück
Oben