So, ich hab mal wieder ein kniffliges SQL Rätsel... -.-
Ich habe eine Tabelle mit 2 Spalten. In der 1. Spalte stehen Adressen (Straße Hausnummer) bsp:(Musterstraße 1A) Die 2. Spalte ist Leer. In die 2. Spalte sollen die Adressen aus der 1 Zeile rein, nur mit einer anderen Schreibweise bsp:(muster-strasse 1A).
Ich dachte mir, ich mach für jeder Straße nen Update. Mein Problem sind nur die Hausnummern, denn ich will nicht für jede Adresse sondern nur für jede Straße ein Query schreiben.
Also, wie kann ich die Hausnummer aus der 1. Spalte ans ende der 2. Spalte schreiben?
Edit: So, nochmal um alle missverständnisse zu vermeiden: Spalte1 | Spalte2 Musterstraße 1 | null Musterstraße 2 | null
soll so aussehen: Spalte1 | Spalte2 Musterstraße 1 | Muster strasse 1 Musterstraße 2 | Muster strasse 2
Das Beispiel und die Frage ist verwirrend. Meinst Du 1. Zeile oder 1. Spalte? Was meinst Du mit "einer anderen Schreibweise" ? Wie sieht die Tabelle zum Anfang aus und wie soll Sie nach dem Update aussehen?
Ich ging bei meinem Vorschlag (s.u.) davon aus, dass die Updates pro Straße vorgenommen werden sollen, wie in der Frage festgelegt: "..denn ich will nicht für jede Adresse sondern nur für jede Straße ein Query schreiben.
Ah, nun hab' ich's glaube verstanden. Statement A für "Musterstraße", Statement B für "Am Anger". Das ist aber viel manuelles Doing, außer die Datenmenge ist gering, bzw. die Anzahl der verschiedenen Straßen ist wenig. Ich persönlich würde mir als Ziel etwas vorstellen, was alles mit einem Statement abdeckt. Da hätte man dann zukünftig auch keine Anpassungen.
Also die Straße Am Anger könnte in der 2. Spalte auch Klaus Peter straße heißen... es geht dabei halt darum, das die straße einen beliebigen anderen namen in der 2. spalte haben soll, nur mit der gleichen hausnummer
update adressen set neueStrasse = 'Muster strasse' || SUBSTR(alteStrasse, LENGTH('Musterstraße'), LENGTH(alteStrasse)) where alteStrasse like 'Musterstraße%';
das musst du dir vermutlich eine Function schreiben. Weil mit standard-SQl kommst du da nicht ganz ans ziel. Eine Simple Split Funktion müsste aber schon alles sein was du brauchst.
schau Dir mal hier die Funktionen an (Oracle Regular Expression). Die sollten bei Oracle alle vorhanden sein, und in Abfragen zu verwenden sein.
Mit den Regular Expression Funktionen kannst Du Dir bestimmte Teile eines String entsprechend eines Musters extrahieren, und somit dann für das Update verwenden. Wahrscheinlich am einfachsten, wenn es sich nur um ein Statement handeln soll, mit SubSelects.
Ein fertiges SQL-Statement kann ich Dir leider nicht liefern, da ich kein Oracle in Verwendung habe.
EDIT: Hier mal ein einfacher RegEx-Ausdruck der eine Hausnummer ermittelt:
(\d+ *\w*)
Achtung: Der Ausdruck deckt folgende Fälle ab: "irgend ein text 123" und "irgend ein text 123 a"
Fall 1 ist der Treffer "123" und in Fall 2 "123 a".
Der Ausdruck funktioniert nicht, wenn du einen folgenden Strassenname hast: "Strasse des 18. Oktober 15"
..."
Ich persönlich würde mir als Ziel etwas vorstellen, was alles mit einem Statement abdeckt. Da hätte man dann zukünftig auch keine Anpassungen.