Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 9 von 9
  1. #1
    Neuer Benutzer
    Registriert seit
    30.04.2009
    Beiträge
    8

    Standard 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. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.309

    Standard

    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

  3. #3
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.858

    Standard

    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?

  4. #4
    Neuer Benutzer
    Registriert seit
    30.04.2009
    Beiträge
    8

    Standard

    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!

  5. #5
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.858

    Standard

    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.

    Code 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 ';

  6. #6
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.309

    Standard

    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)

    Geändert von Christian Marquardt (23.01.2018 um 11:08 Uhr)
    Christian

  7. #7
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.858

    Standard

    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.

  8. #8
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.309

    Standard

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


    lösche, bleibt das linke Leer stehen und umgekehrt. Die Trennung bleibt gewahrt
    Geändert von Christian Marquardt (23.01.2018 um 13:43 Uhr)
    Christian

  9. #9
    Neuer Benutzer
    Registriert seit
    30.04.2009
    Beiträge
    8

    Standard

    Danke !
    Das hat mir einige Stunden gerettet.
    VG

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •