PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Frage (Oracle9)


dernomax
2009-12-09, 16:37:25
Moin!

Ich versuche hier gerade ein Problem zu lösen:
Ich habe ein Feld mit Strings welche den Strassennamen + Nummer enthält
Also zB "Haupstrasse 23b" - wobei die Nummer optional ist.

Auf diese soll ein Select gemacht werden welcher nur die Nummer rauslesen soll, da diese in ein neues Feld reingeschrieben werden muss.

Leider kann oracle9 kein regex... sonst wäre das Problem schon aus der Welt..

Kann mir hier ein SQL Master weiterhelfen?

Danke !:redface:

daflow
2009-12-09, 17:13:54
Bin nich allzutief in den Oracle Feinheiten, mein erster Lösungsansatz wäre sowas wie
-> ermittle length vom Feldinhalt bis eine Zahl kommt
-> Trennung der zukünftigen Felder mit Hilfe von Substr()

CrazyIvan
2009-12-09, 21:53:05
Hätte den gleichen Vorschlag, allerdings mit dem Leerzeichen. Also sowas wie
Right([Adresse], Len([Adresse]) - InStr([Adresse], ' ', 1, 1))

gereggter Gast
2009-12-09, 22:54:34
Hätte den gleichen Vorschlag, allerdings mit dem Leerzeichen. Also sowas wie
Right([Adresse], Len([Adresse]) - InStr([Adresse], ' ', 1, 1))
Das wird in einigen Fällen zum Fehler führen und zwar dann, wenn die Hausnummer fehlt (sie ist optional) und der Straßenname selbst Leerzeichen hat. Dann kommt bei der Adresse "Am Marktplatz" schnell "Marktplatz" als Hausnummer zustande. Bei "Am Marktplatz 23 b" schlägt es ebenfalls fehl.


Bin nich allzutief in den Oracle Feinheiten, mein erster Lösungsansatz wäre sowas wie
-> ermittle length vom Feldinhalt bis eine Zahl kommt
-> Trennung der zukünftigen Felder mit Hilfe von Substr()
Es gibt leider auch Straßennamen mit einer Zahl drin. :-/



Da es keine Regex gibt, ist es leider komplizierter. Man sucht das jeweils letzte Vorkommnis der folgenden Strings in der Adresse: " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9"
Hat man diese ermittelt, nimmt man davon den höchsten Wert + 1. Ab da beginnt die Hausnummer in der Adresse.
Damit kann man zwar nicht alle, aber doch zumindest einige Tücken bei Straßennahmen erschlagen.
Es gibt sicher auch so etwas wie eine MAX Funktion in Oracle 9, dann würde es in etwa so aussehen.
MAX(Right([Adresse], Len([Adresse]) - InStr([Adresse], ' 1', 1, 1)), Right([Adresse], Len([Adresse]) - InStr([Adresse], ' 2', 1, 1)), [..], Right([Adresse], Len([Adresse]) - InStr([Adresse], ' 9', 1, 1)))

dernomax
2009-12-10, 10:22:34
Ich habe schon befürchtet das die Geschichte so kompliziert wird... ay carramba. Gott wirf regex! bzw. Oracle 10 :)
Aber trotzdem auf jeden Fall besten Dank in die Runde. Ich versuche daraus was zusammenzuschustern