Announcement

Collapse
No announcement yet.

Teile von einer Zeichenfolge

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

  • Teile von einer Zeichenfolge

    Ich habe in einer SQLITE-Tabelle 'loeschen' zu Testzwecken eine Spalte 'werte' mit den Einträgen
    Ort, Hausgrundstück Haus Grundstück
    Ort Hausgrundstück
    Hausgrundstück Strasse
    Hausgrundstück Haus
    Haus Strasse Ort
    Haus


    Die Spalte soll nur um die Zeichenfolge 'Haus' bereinigt werden, dort wo die Zeichenfolge solo ist , also nicht als zusmmengesetztes Wort vorkommt. Nach dem Wort 'Haus' gibt es ein Leerzeichen oder auch keines.

    Nach dem Bereinigen soll die Spalte so aussehen:
    Ort, Hausgrundstück Grundstück
    Ort Hausgrundstück
    Hausgrundstück Strasse
    Hausgrundstück
    Strasse Ort

    Hier einer meiner Versuche mit Select :
    Code:
    SELECT _id,REPLACE(SUBSTR(werte,INSTR(werte,'Haus')),'Haus','') FROM loeschen  
    WHERE werte  LIKE '%Haus %' 
    OR werte LIKE '%Haus_%'
    der alle Vorkommen von Haus bereinigen soll; nimmt aber alle aus und in den beiden ersten Zeilen auch die Zeichenfolgen 'Ort';
    Wie kann ich nur die alleinstehende Zeichenfolge 'Haus' ausblenden/bereinigen.
    Danke !
    VG

  • #2
    Wenn es bereinigt werden soll, warum dann ein select und kein update?
    Und wenn das
    Ort, Hausgrundstück Haus Grundstück oder
    Haus Strasse Ort
    in der Spalte steht und das Haus gelöscht werden soll
    replace(werte,'Haus ','')
    ersetze Haus<Leer> mit nichts
    Christian

    Comment


    • #3
      Ist das tatsächlich eine reine Übungsaufgabe und es muss nur mit deinen angegeben Beispielinhalt der Tabelle funktionieren oder steckt da ein realer Anwendungsfall dahinter und da muss eine allgemeinere Lösung her?

      Comment


      • #4
        Danke für die Antwort.
        Es ist keine Übungsaufgabe.
        Es geht um eine SQlite Datenbank, in der in der Abfragespalte extrem viele Wörter und zusammengesetzte Wörter mehrfach vorhanden sind und in einem Listview erscheinen. Deshalb muss ich sie bereinigen.

        Vor dem Update wollte ich das mit der Abfrage starten, aber ich komme da schon nicht weiter weder in der WHERE- Bedingung noch weiß ich nicht recht, wie die Select Anfrage zu formulieren ist.

        Bei allen meinen Versuchen bekomme ich entweder alle Vorkommen von 'Haus' gelöscht oder es bleiben Datensätze stehen, in denen 'Haus' an zweiter oder weitere Stelle vorkommt.

        Der Datensatz kann auch so aussehen:
        Haus Hausstock Hausgrundstück
        oder
        Haus Hausstock Haus Hausgrundstück

        Es sollen halt alle Wortvorkommen gelöscht werden, in denen das Wort 'Haus' solo ist und nicht als zusammengesetztes Wort erscheint.

        Oder muss man das über eine if - else anweisung machen aber wie bemesse ich die jeweilige Länge.

        Deswegen habe ich um Hilfe gebeten.

        Vielleicht kannst Du mir helfen.
        Danke. Noch einen schönen Abend!

        Comment


        • #5
          Es hilft nicht wenn du alle Varianten in einem Sql abhandeln willst das macht es nur unnötig kompliziert. Wenn du garantieren kannst das die Teile immer (mit einem) Leerzeichen getrennt sind hast du genau drei Fälle und die kann man dann einfach mit drei updates abhandeln.

          [HIGHLIGHT=SQL]UPDATE loeschen
          SET werte = REPLACE(werte,' Haus ', ' ')
          WHERE werte like '% HAUS %';

          UPDATE loeschen
          SET werte = REPLACE(werte,'Haus ', '')
          WHERE werte like 'HAUS %';

          UPDATE loeschen
          SET werte = REPLACE(werte,' Haus', '')
          WHERE werte like '% HAUS ';[/HIGHLIGHT]

          Comment


          • #6
            Fall 1 ist entweder Fall 2 oder Fall 3; könnte entfallen
            Fall 3 gibt es nur, wenn am Anfang des Feldes ein Leerzeichen gefolgt von 'Haus' steht.
            Man sollte mit Fall 2 alles finden können.

            Des Weiteren liegt hier wohl auch ein falschen Tabellendesign vor. Die Werte für die Auswahlliste sind einzeln in eine extra Tabelle unter Verweis auf die zugehörige Liste zu speichern (Stichwort Normalisierung, Verletzung 1.,2. Normalform)

            Zuletzt editiert von Christian Marquardt; 23.01.2018, 11:08.
            Christian

            Comment


            • #7
              Fall 1 ist entweder Fall 2 oder Fall 3; könnte entfallen
              Jein. Wenn du dir Fall 1 ansiehst ist da das kleine Detail das da nicht durch nichts ersetzt wird sondern durch ein Leerzeichen. Wen man in der Mitte was entfernt möchte mann ja die Trennung der dann noch vorhandenen Begriffe durch ein Leerzeichen beibehalten.
              Da gibt es möglicherweise andere relativ einfache Lösungen das beizubehalten aber es explizit zu machen läßt halt drei sehr simple updates über. Während man beim zusammenfassen in ein Update da basteln müßte.

              Comment


              • #8
                Wenn ich ein rechtes Leer in der "Mitte"
                ' Haus ', ''


                lösche, bleibt das linke Leer stehen und umgekehrt. Die Trennung bleibt gewahrt
                Zuletzt editiert von Christian Marquardt; 23.01.2018, 13:43.
                Christian

                Comment


                • #9
                  Danke !
                  Das hat mir einige Stunden gerettet.
                  VG

                  Comment

                  Working...
                  X