Ich habe die folgende Anweisung in Rails 3 mit einer SQLite3-Datenbank:
%Vor%Wenn ich dies unter SQLite3 ausführe, bekomme ich immer:
SQLite3 :: SQLException: keine solche Funktion: REGEXP
Ich habe in der SQLite3-Dokumentation gelesen, dass es tatsächlich die REGEXP-Funktion unterstützt. In meiner gemfile habe ich die Zeile
%Vor%Und meine Datenbankkonfigurationsdatei sieht so aus:
%Vor%Irgendwelche Ideen, was ist los?
AUFLÖSUNG: Am Ende fand ich diese Lösung . Leider funktioniert es nicht für Rails 3. Um reguläre Ausdrücke zu verwenden, wechselte ich zu MYSQL anstatt zu SQLite3.
Ich stieß auf das gleiche Problem. Ich nahm den in der Auflösung verwendeten Code, portierte ihn für die Arbeit mit Rails 3+ und machte einen Edelstein für die einfachere Verwendung. Ich hoffe, das hilft.
Aus dem guten Handbuch :
Der REGEXP-Operator ist eine spezielle Syntax für die Benutzerfunktion regexp (). Keine regexp () - Benutzerfunktion ist standardmäßig definiert, daher führt die Verwendung des REGEXP-Operators normalerweise zu einer Fehlermeldung. Wenn zur Laufzeit eine anwendungsdefinierte SQL-Funktion namens "regexp" hinzugefügt wird, wird diese Funktion aufgerufen, um den REGEXP-Operator zu implementieren.
Also unterstützt die Grammatik REGEXP, aber die Standard-SQLite-Bibliothek bietet keine Implementierung dafür. Sie müssen Ihre eigene Implementierung durch ein C-Gerangel verbinden, wenn Sie so etwas wollen oder brauchen.
Vermutlich ist das Grundprinzip, dass die SQLite-Leute SQLite so klein und eng wie möglich halten wollen, aber das Hinzufügen einer ganzen Bibliothek für reguläre Ausdrücke würde Gewicht hinzufügen, das die meisten Leute nicht wollen. Außerdem müssten sie eine Bibliothek für reguläre Ausdrücke auswählen und sie in die SQLite-Quelle einbeziehen, oder sie müssten sich mit den Launen der regulären Unterstützung für reguläre Ausdrücke in libc abfinden. Ich bin keiner der SQLite-Entwickler, also ist dies reine Spekulation.
Ich nehme an, dass Sie sich wahrscheinlich mit LIKE und GLOB begnügen müssen. Die Verwendung von LIKE wird eine tragbarere Lösung bieten.
Sie können sich im Paket sqlite3-pcre
wohlfühlen, das REGEXP
für SQLite implementiert.
Siehe diesen Kommentar zu einem ähnlichen Problem.
Tags und Links sql ruby ruby-on-rails regex sqlite3