Strassennummer von Adresse lösen

Pirlo

Neuer Benutzer
Beiträge
3
Hallo zusammen
Ich suche auf diesem Weg Hilfe in einem Query.
Ich habe eine Tabelle "TbADR" Diese Tabelle enthält eine Spalte "Adresse", welche in folgender Art daherkommt:

Code:
SELECT Strasse
FROM TbADR

Girhaldenstrasse 28
Rue Jacques-Dalphin 19
Räspweg 17

Nun möchte ich jedoch einen Report erstellen wo Strasse und Hausnummern getrennt sind (zwei Spalten).
Meine Überlegung war: "Gib ab dem ersten Leerzeichen von rechts, alle Zeichen aus" für Strassennummer
und: "Lösche alles nach dem ersten Leerzeichen von Rechts" für Strassenname

Wichtig: Die Strassennummer sind zum Teil einstellig, können jedoch auch vierstellig sein und beinhalten ab und zu auch Buchstaben (Weidalee 16A).

Ich habe hier schon mit SUBSTRING(), CHARINDEX(), ect probiert, finde jedoch keine Lösung. Könnt ihr mir helfen?

Besten Dank
 
Werbung:
schnellschuß:

Code:
edb=*# select * from pirlo ;
        strasse         
------------------------
 Girhaldenstrasse 28
 Rue Jacques-Dalphin 19
 Räspweg 17
(3 rows)

edb=*# select *, regexp_replace(strasse, '\d.*$',''), regexp_replace(strasse, regexp_replace(strasse, '\d.*$',''),'') from pirlo ;
        strasse         |    regexp_replace    | regexp_replace 
------------------------+----------------------+----------------
 Girhaldenstrasse 28    | Girhaldenstrasse     | 28
 Rue Jacques-Dalphin 19 | Rue Jacques-Dalphin  | 19
 Räspweg 17             | Räspweg              | 17
(3 rows)

ist aber PostgreSQL.
 
Dein Problem ist duraus gängig und tritt häufig beim Import von Daten auf. Wird aber wird meistens eher gepfuscht im Sinne von Sonderfälle werden halt grade manuell abgearbeitet etc.

Du musst auf jeden Fall gängige Eigenheiten beachten, dazu würde ich jetz als aller erstes mal Fälle zählen wie:
- Du hast mehrere Hausnummern mit Bindestrich dazwischen. Meist wird dann auch noch mit Leerschritten gearbeitet.
- Du hast gar keine Hausnummer sondern einfach nur eine Bezeichnung oder einen Straßennamen, das gibt es durchaus.

Hier mal ein recht einfaches Beispiel wie man das beides umsetzen könnte:
Code:
WITH tabelle AS (
    SELECT 'Hauptstraße 3a - 3b' AS strasse
    UNION ALL
    SELECT 'Am Kreisverkehr' AS strasse
    )
SELECT    (    CASE
            WHEN    strasse LIKE '%[0-9]%'
            THEN    rtrim(left(strasse,patindex('%[0-9]%',strasse)-1))
            ELSE    strasse
            END ) AS strasse,
        (    CASE
            WHEN    strasse LIKE '%[0-9]%'
            THEN    right(strasse,datalength(strasse)-patindex('%[0-9]%',strasse)+1)
            ELSE    NULL
            END ) AS hausnummer
FROM    tabelle
Ich gucke ob es eine Ziffer gibt, wenn ja dann suche ich die erste Ziffer und alles ab der ersten Ziffer gehört für mich zur Nummer. So was wie A3 als Hausnummer gibt es im deutschsprachigem Raum glaube ich nicht, auch sonst fällt mir grade kein Fall ein der nicht funktionieren würde.
 
schnellschuß:

Code:
edb=*# select * from pirlo ;
        strasse        
------------------------
 Girhaldenstrasse 28
 Rue Jacques-Dalphin 19
 Räspweg 17
(3 rows)

edb=*# select *, regexp_replace(strasse, '\d.*$',''), regexp_replace(strasse, regexp_replace(strasse, '\d.*$',''),'') from pirlo ;
        strasse         |    regexp_replace    | regexp_replace
------------------------+----------------------+----------------
 Girhaldenstrasse 28    | Girhaldenstrasse     | 28
 Rue Jacques-Dalphin 19 | Rue Jacques-Dalphin  | 19
 Räspweg 17             | Räspweg              | 17
(3 rows)

ist aber PostgreSQL.
Deswegen eine überflüssige Antwort von dir weil sie nicht funktioniert und daher nicht hilfreich.
 
Hallo zusammen
Ich suche auf diesem Weg Hilfe in einem Query.
Ich habe eine Tabelle "TbADR" Diese Tabelle enthält eine Spalte "Adresse", welche in folgender Art daherkommt:

Code:
SELECT Strasse
FROM TbADR

Girhaldenstrasse 28
Rue Jacques-Dalphin 19
Räspweg 17

Nun möchte ich jedoch einen Report erstellen wo Strasse und Hausnummern getrennt sind (zwei Spalten).
Meine Überlegung war: "Gib ab dem ersten Leerzeichen von rechts, alle Zeichen aus" für Strassennummer
und: "Lösche alles nach dem ersten Leerzeichen von Rechts" für Strassenname

Wichtig: Die Strassennummer sind zum Teil einstellig, können jedoch auch vierstellig sein und beinhalten ab und zu auch Buchstaben (Weidalee 16A).

Ich habe hier schon mit SUBSTRING(), CHARINDEX(), ect probiert, finde jedoch keine Lösung. Könnt ihr mir helfen?

Besten Dank
Am besten benutzt dazu die Reverse Funktion. mit den anderen String Funktionen isses dann ziemlich leicht.
 
Das mit den ersten Leerzeichen von Rechts geht mit reverse() und charindex() natürlich aber wie gesagt, es gibt Hausnummern mit Leerzeichen, z.B. wenn mit Bindestrich gearbeitet wird, häufig.
 
Werbung:
Hallo zusammen
Nachträglich noch besten Dank für die Antworten. Habe nun folgende beiden Lösungen im einsatz und unktionieren soweit auch.

Strassenbezeichnung ausgeben:
SQL:
LEFT(Adresstabelle.Strasse,PATINDEX('%_[0-9]%',Adresstabelle.Strasse + '_0')-1)

Strassennummer ausgeben:
SQL:
SELECT TRIM(REVERSE(LEFT(REVERSE(Adresstabelle.Strasse),CHARINDEX(' ',REVERSE(Adresstabelle.Strasse)))))
FROM Adresstabelle



 
Zurück
Oben