Auge: Adressdaten vor der Speicherung filtern

Hallo

Ich stehe vor der Aufgabe, Adressdaten in einer Tabelle einer MS-SQL-Datenbank (SQL Server Express 2008) zu speichern, wobei Teile der möglichen Rohdaten aussortiert werden sollen.

Konkret geht es darum, Hausnummernzusätze zu filtern. Dabei kann es sich um Buchstaben („3 a“) oder z.B. um Aufgangsnummern („4 Aufg. 1“ oder „5 Haus 2“) handeln, aber auch um für mich irrelevante Daten wie Bezeichnungen für Seitenflügel, Gartenhäuser oder Quergebäude und das in unterschiedlichsten Notationen. Auf das Format der Rohdaten bei deren Einlieferung habe ich leider keinen Einfluss, weshalb ich darauf angewiesen bin, mit den vorhandenen Daten umzugehen.

Beim durchforsten der Rohdaten komme ich auf bisher Sage und Schreibe 108 (in Worten: Einhundertundacht) auszusortierende Strings. In PHP würde ich für die auszusortierenden Daten ein Array bilden und die Rohdaten mit !in_array filtern. Wie kann ich soetwas in SQL nachbilden?

Ich kann zwar die zu filternden Strings mit einer Auflistung in IN abgleichen aber spätestens dann, wenn ein Hausnummerzusatz mit einer Kombination aus erlaubtem und zu filterndem Inhalt (z.B. „12 a/Hhs“, a ist erlaubt, /Hhs soll nicht übernommen werden) oder genereller mit mehreren Strings auftaucht, funktioniert das nicht mehr, wie (un)wahrscheinlich es auch sein mag, dass dieser Fall eintritt. Der String würde dann mit einem unerlaubten Wert verschiedener möglicher Längen enden. Ich weiß nicht, ob es eine gute Idee ist, das in SQL mit (momentan) 108 möglichen Werten durchzutesten (Länge des Vergleichswerts bestimmen, Substring vom Ende der Rohdatenwerts abschneiden und den mit dem Vergleichswert vergleichen). Geht das einfacher?

Den Aufwand für nachträgliche Datenpflege möchte ich zumindest niedrig halten.

Tschö, Auge

--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett
  1. Hello,

    es sollte doch auch in MS-SQL reguläre Ausdrücke geben, mit deren Hilfe man die Verdachtskandidaten auswerfen lassen kann, um sie dann auf jeden Fall einer Sichtkontrolle (mit Vorschlag) zu unterziehen. Ich habe sowas zu guten alten dBasezeiten mal für die Postleitzahlumstellung (mit)machen dürfen. Die Agentur in Berlin kam ganz schön ins Schwitzen.

    Und Mannheim kannst Du vermutlich schon mal ganz rausnehmen aus dem Lösungsversuch. Da passt schon die Aufgabenstellung nicht.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo

      es sollte doch auch in MS-SQL reguläre Ausdrücke geben, mit deren Hilfe man die Verdachtskandidaten auswerfen lassen kann, um sie dann auf jeden Fall einer Sichtkontrolle (mit Vorschlag) zu unterziehen.

      Ich glaube nicht, dass die Strings mit regulären Ausdrücken zu erschlagen sind.

      Und Mannheim kannst Du vermutlich schon mal ganz rausnehmen aus dem Lösungsversuch.

      Wieso? Es gibt Straßennamen und Hausnummern, die ich nicht anfasse. Falls es Hausnummerzusätze geben sollte, werden die auch in erwünschte und eventuell in unerwünschte Werte teilbar sein.

      Da passt schon die Aufgabenstellung nicht.

      Worin besteht dann die Relevanz deiner Anmerkung?

      Tschö, Auge

      --
      Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
      Toller Dampf voraus von Terry Pratchett
      1. Hello,

        Und Mannheim kannst Du vermutlich schon mal ganz rausnehmen aus dem Lösungsversuch.

        Wieso? Es gibt Straßennamen und Hausnummern, die ich nicht anfasse. Falls es Hausnummerzusätze geben sollte, werden die auch in erwünschte und eventuell in unerwünschte Werte teilbar sein.

        Da passt schon die Aufgabenstellung nicht.

        Worin besteht dann die Relevanz deiner Anmerkung?

        Das musst DU entscheiden :-)

        Mangels von Dir gelieferten Datenmodells kann ich nicht sehen, wo die Hausnummer steht. Sie könnte auch in der Spalte "Strasse" stehen. Nicht immer sind die gelieferten Datenformate vollständig atomar aufgebaut.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Hallo

          Mangels von Dir gelieferten Datenmodells kann ich nicht sehen, wo die Hausnummer steht. Sie könnte auch in der Spalte "Strasse" stehen. Nicht immer sind die gelieferten Datenformate vollständig atomar aufgebaut.

          Straßenname, Hausnummer und Hausnummerzusatz liegen in den Rohdaten in drei Feldern vor. Daher spielen der Straßenname und die Hausnummer in dieser Aufgabe keine Rolle. Die Werte werden allerdingszusammen in einem Feld gespechert. Der Schritt der gemeinsamen Speicherung erfolgt aber nach der Filterung, um die es hier geht. Zum Zeitpunkt, an dem ich filtern will, ist der Hausnummerzusatz ein eigenes Datum.

          Tschö, Auge

          --
          Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
          Toller Dampf voraus von Terry Pratchett
          1. Hello,

            Straßenname, Hausnummer und Hausnummerzusatz liegen in den Rohdaten in drei Feldern vor.

            Dann bitte ich um Verzeihung für meinen Vorschlag.
            Du hattest es anders beschrieben.

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
          2. Hi,

            Straßenname, Hausnummer und Hausnummerzusatz liegen in den Rohdaten in drei Feldern vor. Daher spielen der Straßenname und die Hausnummer in dieser Aufgabe keine Rolle. Die Werte werden allerdingszusammen in einem Feld gespechert.

            Davon rate ich ab. Straße und Hausnummer sollten m.E. getrennt bleiben.

            Zusammenfügen bei der Verwendung ist problemlos, aber brauchst Du sie irgendwann wieder getrennt (z.B. für eine Schnittstelle zur Adreß-Validierung), bekommst Du sie automatisch kaum mehr auseinander.

            Weil es Straßennamen gibt, die Zahlen enthalten. (in Berlin z.B. "Straße 5", aber auch andernorts "Straße des 17. Juni", "Gartenkolonie 2", usw.).

            cu,
            Andreas a/k/a MudGuard

    2. Hello,

      Nachtrag:

      Auf jeden Fall müssen die Daten vor der Filterung normalisert werden. Das bezieht sich heutzutage leider nicht nur auf unerwünschte Zeichen, fehlende/überschüssige Leerzeichen, Bindestriche, Schrägstriche usw., sondern auch auf den Zeichensatz bzw. vermutlich besser ausgedrückt, die Kodierung, durch die der verfügbare Zeichnsatz mMn ja ggf. erweitert/eingeschränkt wird.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
  2. Hi,

    Konkret geht es darum, Hausnummernzusätze zu filtern. Dabei kann es sich um Buchstaben („3 a“) oder z.B. um Aufgangsnummern („4 Aufg. 1“ oder „5 Haus 2“) handeln, aber auch um für mich irrelevante Daten wie Bezeichnungen für Seitenflügel, Gartenhäuser oder Quergebäude und das in unterschiedlichsten Notationen.

    soweit mir bekannt (und ich bekomm viele deutschlandweite Adressen zu sehen) sind als echter Bestandteil von Hausnummern nur einzelne Buchstaben existent, nicht mehrere.

    Man könnte also per regex erstmal die Datensätze rausfiltern, die mehrere (aufeinanderfolgende) Buchstaben in der Hausnummer enthalten.

    Und ggf. alles ab dem zweiten Buchstaben entfernen?

    cu,
    Andreas a/k/a MudGuard

    1. Hallo

      Konkret geht es darum, Hausnummernzusätze zu filtern. Dabei kann es sich um Buchstaben („3 a“) oder z.B. um Aufgangsnummern („4 Aufg. 1“ oder „5 Haus 2“) handeln, aber auch um für mich irrelevante Daten wie Bezeichnungen für Seitenflügel, Gartenhäuser oder Quergebäude und das in unterschiedlichsten Notationen.

      soweit mir bekannt (und ich bekomm viele deutschlandweite Adressen zu sehen) sind als echter Bestandteil von Hausnummern nur einzelne Buchstaben existent, nicht mehrere.

      Hmm, das wäre wohl zu einfach. Ich sehe hier in Berlin durchaus Hausnummerschilder, die (z.B.) statt „7 a“ mit „7 Aufgang A“ oder einer Abkürzung von „Aufgang“ („Auf.“ oder „Aufg.“) beschriftet sind. Oder „Haus 3“ oder „Hs. 3“ auf einer größeren Anlage auf einen Grundstück mit einer einzelnen Hausnummer. Zudem kann es sein, dass derjenige, der die Daten usprüngl. einpflegte, eine eigene Syntax verwendet (z.B. fehelnder Punkt für die Abkürzung). Diese Notationen werden dann auch benutzt, sind mMn auch zulässig und können bei mir aufschlagen.

      Ich möchte also längere Zusätze als ein Zeichen zulassen.

      Tschö, Auge

      --
      Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
      Toller Dampf voraus von Terry Pratchett
    2. Moin Mudguard,

      hier in Baden gibt es auch Hausnummern der Form 23/1. Oder ist dann /1 der Hausnummernzusatz?

      Viele Grüße
      Robert

      1. Hello Robert,

        hier in Baden gibt es auch Hausnummern der Form 23/1. Oder ist dann /1 der Hausnummernzusatz?

        Wenn Du uns zur Begutachtung eine etwas größere Menge zur Auswahl stellen könntest mit einen Hinweis darauf, was jeweils die Bedeutung sein soll, könnte man das vielleicht entscheiden.

        Aber hier gilt mMn wieder der Grundsatz: "Nur wer das Ganze kennt, kann im Detail entscheiden". Extrapolation aus wenigen Werten hat bei der Datendeutung selten einen echten Nutzen.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Moin TS,

          in diesem Kartenausschnitt gibt es sowohl /N im Sinne von a, b, …, als auch direkt an einer Straßenecke. Das gibt es dort in der Gegend öfter.

          Viele Grüße
          Robert

      2. Hallo

        hier in Baden gibt es auch Hausnummern der Form 23/1.

        Das habe ich in Bayern auch schon gesehen.

        Oder ist dann /1 der Hausnummernzusatz?

        Nach meinem Verständnis ist das so. Der Zusatz „/1“ bezeichnet den ersten von mehreren Zu- bzw. Aufgängen eines Hauses. Die Hausnummern „23/1“ und „23/2“ würden in anderen Gegenden als „23 a“ und „23 b“ oder als „23 Aufgang 1“ und „23 Aufgang 2“ etc. bezeichnet.

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett
        1. Hello,

          hier in Baden gibt es auch Hausnummern der Form 23/1.

          Das habe ich in Bayern auch schon gesehen.

          Oder ist dann /1 der Hausnummernzusatz?

          Nach meinem Verständnis ist das so. Der Zusatz „/1“ bezeichnet den ersten von mehreren Zu- bzw. Aufgängen eines Hauses. Die Hausnummern „23/1“ und „23/2“ würden in anderen Gegenden als „23 a“ und „23 b“ oder als „23 Aufgang 1“ und „23 Aufgang 2“ etc. bezeichnet.

          Kennzeichnen die unterschiedliche Zugänge zum selben Terrain, oder kennzeichnen die unterschiedliche Terrains, die ggf. auch (in DE) im Grundbuch als getrennte Parzellen (oder wie imme sich das nennt) eingetragen sind?

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
          1. Moin,

            in Baden kennzeichnen die tatsächlich verschiedene Terrains, siehe oben.

            Viele Grüße
            Robert

            1. Hello,

              in Baden kennzeichnen die tatsächlich verschiedene Terrains, siehe oben.

              Gefragt habe ich das auch nur (eventuell für Folgeleser) wegen der Frage nach der Relevanz. Die kann man ja nicht pauschal beantworten. Die Relevantz ist immer abhängig von den Rahmenbedingungen, also Zielanwendung z. B.:

              • von welcher Seite kann die Feuerwehr das Objekt erreichen?,
              • Briefträger, wo hängen die Briefkästen,
              • zu welchem Grundstückseigentümer gehört die Einfahrt?
              • Wer ist Anlieger zu diesem Grundstück?

              Und außerdem könnte es auch manchmal sinnvoll sein, die Zusatzinformation nicht einfach zu löschen, sondern weiter zu "atomisieren", also in einem "Rest-Feld" beizubehalten.

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
      3. Hi,

        hier in Baden gibt es auch Hausnummern der Form 23/1.

        es gibt auch '25 1/2', '25 3/4' u.ä.

        Oder ist dann /1 der Hausnummernzusatz?

        Soweit mir bekannt ist ein "/1", "1/2", "a" integraler Bestandteil der Hausnummer. So etwas wie Hausnummernzusatz gibt es m.W. offiziell nicht.

        Das muß also derjenige beantworten, der von Hausnummernzusatz spricht.

        Die Buchstaben oder Brüche oder ähnliches kommen oft dann zustande, wenn Grundstücke nachträglich aufgeteilt werden und an der betroffenen Stelle keine Lücke in der Numerierung vorhanden ist. Also z.B. wenn es bisher Häuser mit den Nummern 21, 23, 25 gibt, und auf dem mittleren Grundstück ein zusätzliches Haus gebaut wird - das bekommt dann eine 23a oder 23/1 oder ähnliches. Oder wenn z.B. auf der einen Seite der Straße Reihenhäuser quer zur Straße stehen - damit die Nummern links und rechts der Straße nicht zu sehr auseinanderlaufen.

        Genaueres regelt die Hausnummernsatzung der jeweiligen Gemeinde.

        cu,
        Andreas a/k/a MudGuard

        1. Hallo

          Soweit mir bekannt ist ein "/1", "1/2", "a" integraler Bestandteil der Hausnummer. So etwas wie Hausnummernzusatz gibt es m.W. offiziell nicht.

          Das muß also derjenige beantworten, der von Hausnummernzusatz spricht.

          Der Zusatz ergibt sich — unabhängig vom Umstand, ob es einen „Hausnummernzusatz“ laut TGL … ähh … DIN gibt — aus dem Datenmodell der Rohdaten. Soweit ich aus den vorliegenden Daten schließe, kann die Hausnummer nur aus Ziffern bestehen, da alle Bestandteile, die aus nichtnumerischen Zeichen bestehen, immer im Zusatzfeld notiert sind. So werden im Feld für den Hausnummerzusatz neben den Buchstaben oder „Brüchen“ auch weitere Zahlen für den Fall eines Gebäudes, das auf mehreren Grundstücken errichtet wurde („Schmidtstraße 16**-18**“), notiert. Oder eben Ortsangaben innerhalb des Grundstücks.

          Sind Zusatzinfos für das Grundstück/Gebäude selbst wichtige Infos, da sie zur Bezeichnung des Grundstücks/Gebäudes gehören, ist die Info „re“ für „rechts“ oder „Vdh“ für Vorderhaus für die Adresse selbst unerheblich. Zumal sich daraus ergeben kann, dass, um ein zugespitztes Beispiel mit einigen der vielen Schreibweisen zu zeigen, eine Adresse mehrfach als „Schmidtstraße 14**.Hhs**“, „Schmidtstraße 14SFl“, „Schmidtstraße 14QG“, „Schmidtstraße 14**-SFre**“, „Schmidtstraße 14**/Remise**“, „Schmidtstraße 14**/VH**“ und so weiter eingetragen wird, obwohl es sich immer um ein und das selbe Grundstück/Gebäude handelt.

          Tschö, Auge

          --
          Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
          Toller Dampf voraus von Terry Pratchett