Wie erreicht man Wortgrenzen in Sqlite Android?

8

Ich möchte Folgendes erreichen (eine Volltextsuche),

%Vor%

Wo ich mich nur für exakte Zeichenfolgen (nicht nur Wörter) aus einer Volltextspalte interessiere.

Ich habe genau das obige SQL in MySQL verwendet und migriere jetzt den größten Teil des Codes in Android-Apps.

Aber ich habe mir verschiedene Beiträge angeschaut, in denen erwähnt wird, dass REGEXP in Android Sqlite nicht unterstützt wird (zum Beispiel: link1 , link2 , link3 ).

Gibt es eine Möglichkeit, REGEXP in Android zu aktivieren?

Gibt es keine Alternativen für das obige SQL?

Danke,

BEARBEITEN: Momentan erhalte ich die folgende Ausnahme, wenn ich REGEXP in Android verwende,

%Vor%

Ich verstehe, dass wir GLOB und LIKE (oder sogar MATCH) verwenden können. Wie kann columnname REGEXP '[[:<:]]somestring[[:>:]]' konvertiert werden, um GLOB und / oder LIKE und / oder MATCH ?

zu verwenden

LÖSUNG 1 : Mit @cybersam hilft die folgende Hilfe, die ich benutze (nach einigen Änderungen)

%Vor%

GLOB unterscheidet zwischen Groß- und Kleinschreibung, daher habe ich ein zusätzliches OR

@cybersam 's zweite Lösung ist in meinem Fall viel schneller.

LÖSUNG 2 : Um die In-Sensitivität zu berücksichtigen

%Vor%     
Community 30.01.2015, 03:11
quelle

1 Antwort

8

Um REGEXP tatsächlich zu unterstützen, müssen Sie Ihre eigene regexp () Benutzerfunktion hinzufügen.

Dieser Link könnte Ihnen helfen finde heraus, wie man benutzerdefinierte Funktionen im Allgemeinen für Android erstellt - aber es ist nicht einfach.

Wenn Ihre Muster sehr einfach sind, könnte der GLOB-Operator gut genug sein.

Um beispielsweise eine dieser MYSQL-Abfrage entsprechende Suche durchzuführen:

%Vor%

Sie können dies in SQLite versuchen:

%Vor%

Die obige Abfrage verwendet die Tatsache, dass in MYSQL ein Wortzeichen entweder als alphanumerisches Zeichen oder als Unterstrich definiert ist. Die zusätzlichen OR -Begriffe werden benötigt, um auch die Fälle zu berücksichtigen, in denen kein Text auf einer (oder beiden) Seiten von some string vorhanden ist.

Wenn schließlich 'eine Zeichenfolge' in columnname relativ selten ist, ist die folgende längere Abfrage möglicherweise tatsächlich schneller, da sie nur für eine Minderheit von Werten mehrere GLOB -Auswertungen durchführt:

%Vor%     
cybersam 30.01.2015, 03:22
quelle