SQL Abfrage mit LIKE Abfrage und Leerzeichen ignorieren

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    SQL Abfrage mit LIKE Abfrage und Leerzeichen ignorieren

    Hallo Leute,

    ich hab zwar gegoogelt, bin aber nicht auf die Lösung gekommen.

    Es geht um die Suche in einer Datenbank (Access MDB mit SQL-Abfrage).

    Beispielinhalt Tabelle:
    "Wenn wir alle zusammehalten, dann wird alles wieder gut."

    Suche nach "zusammen": SELECT * FROM Table WHERE Inhalt LIKE %zusammen% Es wird der Eintrag gefunden :thumbsup:

    Suche nach "zusammenhalten": SELECT * FROM Table WHERE Inhalt LIKE %zusammenhalten% Es wird der Eintrag gefunden :thumbsup:

    Sucht man nun aber nach "zusammen halten" (getrennt geschrieben), dann wird natürlich nichts gefunden.

    Gibt es in SQL (Access-SQL) eine Möglichkeit den Suchstring und die Feldstrings ohne Leerzeichen zu vergleichen?
    Also in etwas so (schemenhaft angedeutet):

    SELECT * FROM Table WHERE SpaceEntfernen(Inhalt) LIKE %SpaceEntfernen("zusammen halten")%

    Also eine Volltextsuche, welcher es egal ist ob ein Suchbegriff zusammen oder getrennt geschrieben wird.

    Also sucht man nach "Hotelsoftware", "Hotel Software", "Hotel" oder "Software", dann soll immer der Eintrag "Hotel Software" gefunden werden.

    Vielleicht gibt es da irgend eine Möglichkeit direkt bei der SQL-Abfrage?
    Liebe Grüße
    Roland Berghöfer

    Bei der Entwicklung meiner Anwendung(en) steht nicht "Code nach .NET Lehrbuch" im Vordergrund, sondern eine stabile und brauchbare Anwendung die der Anwender ordentlich verwenden kann. Usability für den Kunden und Supportbarkeit beim Kunden stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider. Bitte verzeiht, dass meine VB.NET Quellcodes etwas VB6-lastig sind aber das ist für das funktionierende Endergebnis nicht wirklich relevant.
    Interessante Frage. So spontan würde ich den Suchbegriff beim Leerzeichen splitten und das Ergebnis per Schleife durch iterieren. Darin dann die WHERE Klausel zusammen setzen mit OR dazwischen. Aber evtl. hat da jemand ja noch ne bessere Lösung :)

    edit:

    oder aber sowas:

    ... WHERE Replace(MeineSpalte,' ','') Like %suchbegriff%

    Wobei der Suchbegriff dann vorab per String.Replace() auch von den Leerzeichen befreit werden muss.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    eine möglichkeit wäre mit Regex, wie performant das ist habe ich nie getestet
    suche mal nach ...Regex in Access queries...

    ein treffer.... icodeguru.com/database/access.…esshks-chp-5-sect-16.html


    gruss
    kasi

    *URL-Tag repariert*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Access reagiert auf das Wildcard-Pattern *, nicht auf % wie in MySql oder MS-SQL.
    docs.microsoft.com/de-de/offic…ator-microsoft-access-sql

    SQL-Abfrage

    1. SELECT * FROM Table WHERE Inhalt LIKE '*zusammen*halten*'


    Oder wenn du Suchbegriff und Datenbankinhalt blankneutral abragen willst:

    Visual Basic-Quellcode

    1. Cmd = "SELECT * FROM table WHERE REPLACE(Inhalt,' ','') LIKE *" & Replace(Suchbegriff," ","") & "*"


    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „petaod“ ()

    Cmd = "SELECT * FROM table WHERE REPLACE(Inhalt,' ','') LIKE *" & Replace(Suchbegriff," ","") & "*"


    Vielen Dank. Also doch einfacher als ich dachte. Hat funktioniert.
    Liebe Grüße
    Roland Berghöfer

    Bei der Entwicklung meiner Anwendung(en) steht nicht "Code nach .NET Lehrbuch" im Vordergrund, sondern eine stabile und brauchbare Anwendung die der Anwender ordentlich verwenden kann. Usability für den Kunden und Supportbarkeit beim Kunden stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider. Bitte verzeiht, dass meine VB.NET Quellcodes etwas VB6-lastig sind aber das ist für das funktionierende Endergebnis nicht wirklich relevant.