Textteile selectieren

IchHH

Datenbank-Guru
Beiträge
282
Hallo, wie kann ich nur Teile einer Zelle abschneiden und in einer anderen Spalte kopieren?

Hört sich ein wenig komisch an. Hier aber zur Verdeutlichung:

1. Ich möchte alle Zeichen in einer straße die nach c/o (wenn existent) kommen aber inkl. den c/o in einer zweiten Spalte anzeigen lassen, die erste Spalte soll dann den Wert nicht mehr anzeigen

2. Ich möchte gerne dann alle Zeichen nach der ersten Zahl in einer anderen Spalte angezeigt bekommen.

Mit left oder right kann man nicht arbeiten, bin mir aber auch nicht wirklich sicher.
 
Werbung:
patindex() ist dein Freund:
Code:
SELECT   rtrim(left(spalte,len(spalte)-patindex('%c/o%',spalte))) AS davor,
     right(spalte,patindex('%c/o%',spalte)) AS danach
FROM tabelle
 
Das funktioniert nur bedingt. Nur bei 2 von 16 Datensätzen hat das geklappt. Das gilt sowohl bei "davor" als auch bei "danach". Woran könnte das liegen?
 
Interessanterweise ist das nicht der Fall. Es gibt auch kein Muster was ich erkennen kann. Manchmal schneidet er den Text mitten im Straßennamen ab, manchmal nach einem Punkt oder Komma. Das sieht dann so aus

danach
t Str. 64 c/o Jahr
r. 37 c/o Schloss
einw.1A c/o Baum

usw.
 
Ja mein Fehler, zu früh, zu wenig Tests:
Code:
SELECT   patindex('%c/o%',spalte),
     (CASE WHEN spalte LIKE '%c/o%' THEN left(spalte,patindex('%c/o%',spalte)-1) ELSE spalte END) AS davor,
     (CASE WHEN spalte LIKE '%c/o%' THEN right(spalte,len(spalte)-patindex('%c/o%',spalte)+1) ELSE NULL END) AS danach
FROM   tabelle
 
Werbung:
Du könntest auch die CASE-Bedingung weg lassen wenn du z.B. im WHERE-Teil sagst das nur Spalten mit c/o selektiert werden. Leider muss man das irgendwie prüfen sonst bekommt er in Spalte "davor" eine -1 als Längen-Paramter.
 
Zurück
Oben