Announcement

Collapse
No announcement yet.

Text filtern mit SQL Anweisung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Text filtern mit SQL Anweisung

    Morgen,

    neuer Tag, neues Problem.

    Ich habe eine Tabelle [Kunden] mit einer Adressspalte in der die Straße, Postleitzahl, Stadt und teilweise auch der Name der Firma gespeichert sind und nur durch Leerzeichen getrennt sind.

    Beispiel:
    Am Musterweg 3 14478 Postdam oder
    Wirtschaftsprüfer Musterstrasse 10328 Berlin

    Ich hätte jetzt gerne nur die Postleitzahl und wenn's geht noch die Stadt ausgegeben. Also muss ich irgendwie den Text filtern - in einer SQL-Anweisung

    HILFE!!!

  • #2
    Hallo OLAPStudent,

    eigentlich wäre Regular Expressions nötig, um PLZ Ort in einem String zu identifizieren.
    Wenn man aber die Voraussetzungen annehmen kann, das PLZ immer 5 Ziffern sind (und sonst keine 5 vorkommen) und alles danach der Ort ist, kann man es mit einem PatIndex finden und raus filtern.
    [highlight=SQL]SELECT SUBSTRING(Adresse
    ,PATINDEX('%[0-9][0-9][0-9][0-9][0-9] %', Adresse)
    ,LEN(Adresse)) AS PlzOrt
    FROM
    (SELECT 'Mustermann 12345 Musterdorf' AS Adresse UNION ALL
    SELECT 'Mustermann Musterstr. 123, 12345 Musterdorf' UNION ALL
    SELECT 'Unbekannt 10001 Berlin') AS Adr
    [/highlight]

    [highlight=CODE]PlzOrt
    ----------------
    12345 Musterdorf
    12345 Musterdorf
    10001 Berlin[/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      die postleitzahlen sind natürlich leider nicht alle 5stellig.
      Zusätzlich würde ich gerne nur die Postleitzahl in einer Spalte haben und die Stadt in einer anderen. Meinet wegen auch nur die postleitzahl.
      Kommen wir vielleicht auf die RegEx zurück. Ich hab mal versucht nen bissel zu recherchieren - aber da ergeben sich nur wenig hilfreiche Artikel.
      Ich kann ja mal kurz erklären worauf ich hinaus will.
      Ich habe eine Kundenadresse und eine Lieferadresse. Die Kundenadresse ist in 3 spalten augesplittet (Adresse,PLZ,stadt), die Lieferadresse beinhaltet die gleichen infos aber in volltext in einer spalte. ich möchte nun gerne wissen, bei wem lieferadresse = kundenadresse, und das über die Postleitzahl vergleichen.

      Bsp.: select * from [Kunden] where [(Postleitzahl aus dem Volltext)] = [Postleitzahl aus PLZ-Spalte].

      Probleme in der gleichen Richtung habe ich auch bei anderen Tabellen, daher ist das für mich echt wichtig.

      Comment


      • #4
        Originally posted by OLAPStudent View Post
        die postleitzahlen sind natürlich leider nicht alle 5stellig. ...
        die Lieferadresse beinhaltet die gleichen infos aber in volltext in einer spalte. ich möchte nun gerne wissen, bei wem lieferadresse = kundenadresse, und das über die Postleitzahl vergleichen.
        Wird Dir noch viel Freude bereiten...

        Eine Spielart wäre (Setzt Leerzeichen an den entsrechenden Stellen voraus)
        Code:
        SELECT   SUBSTRING (X.PlzOrt, 1, CHARINDEX (SPACE(1), X.PlzOrt) -1 ) AS PLZ
              ,  LTRIM (RTRIM (SUBSTRING (X.PlzOrt, CHARINDEX (SPACE(1), X.PlzOrt) , 100))) AS ORt
        
        FROM (   SELECT CASE WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9] %', ADR.Adresse) != 0
                             THEN SUBSTRING(ADR.Adresse
                                           ,PATINDEX('%[0-9][0-9][0-9][0-9][0-9] %', ADR.Adresse)
                                           ,LEN(ADR.Adresse))
                             ELSE SUBSTRING(ADR.Adresse
                                           ,PATINDEX('%[0-9][0-9][0-9][0-9] %', ADR.Adresse)
                                           ,LEN(ADR.Adresse))
                             END                  AS PlzOrt
                 FROM (SELECT 'Mustermann 12345 Musterdorf' AS Adresse 
                       UNION ALL  SELECT 'Mustermann Musterstr. 123 12345 Musterdorf' 
                       UNION ALL  SELECT 'Unbekannt 10001 Berlin'
                       UNION ALL SELECT ' Am Test 3 9999 TestDorf'
                      )  AS ADR
             ) AS X

        Comment


        • #5
          Danke schonmal für die Hilfe.

          Nachdem ich den Sinn der Syntax verstanden habe, funnktioniert es ganz gut - bis auf wenige Ausnahmen. Vielleicht könnt ihr mir da auch noch helfen. Und zwar ist in manchen Spalten ein Text enthalten wie

          "Musterstraße 14 12345 Niemandsland heute Musterweg 3 54321 Weßickwo"
          Mit der Abfrage:

          Code:
          substring(TabelleX.Address2,
                    patindex('%[0-9][0-9][0-9][0-9][0-9]%',TabelleX.Address2),5) as PLZ2
          from TabelleX
          bekomme ich natürlich nur

          PLZ2
          ----------
          12345
          ausgelesen, benötige aber die aktuelle. Fragt mich nicht wer sich diesen Mist ausgedacht hat, das so zu hinterlegen, aber ändern kann ich es leider auch nich.

          Comment


          • #6
            Tja, da fällt mir auch nur noch ein; leg Dir eine Hilfsspalte/-tabelle an, in der Du Dir die Start-Position der PLZ enthält; Update mit dem ersten Statement.
            Dann kannst Du in einem zweiten Schritt noch mal selektieren, ob ab der zunächst gefundenen Position+1 eine weitere Mögliche PLZ auftaucht und schreibst die neue Positionen in zurück.
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Hallo,

              ich habe ein ähnliches Problem.
              Ich habe mit Substring und Patindex herumprobiert jedoch
              schaffe ich kein gutes Resultat.

              Mein Problem:
              Textfeld mit vollständiger Adresse.
              Ich möchte die letzten 3 Zeilen abschneiden wenn in der Spalte Land nicht Deutschland steht und 2 Zeilen wenn in der Spalte Land Deutschland steht. (Jeweils von hinten gesehen)
              ---
              Firma
              Abteilung
              Amtsbezeichnungen
              Anrede Akad Titel Vorname Adelstitel Nachname Zusatz
              Straße
              Plz Ort
              Land
              ---
              Land wird in dieses Textfeld nur geschrieben wenn da nicht Deutschland drinsteht.

              Ist das möglich innerhalb einer SQL Abfrage für MS SQL?

              Grüße
              Sebastian1234
              Zuletzt editiert von sebastian1234; 07.11.2009, 12:04. Reason: RS Fehler

              Comment

              Working...
              X