¿Cómo uso expresiones regulares en una consulta SQLite?
Me gustaría utilizar una expresión regular en sqlite, pero no sé cómo.
Mi tabla tiene una columna con cadenas como esta: "3,12,13,14,19,28,32" Ahora, si escribo "donde x ME GUSTA '3'", también obtengo las filas que contienen valores como 13 o 32. , pero me gustaría obtener sólo las filas que tienen exactamente el valor 3 en esa cadena.
Alguien sabe cómo resolver esto?
Como ya han señalado otros, REGEXP llama a una función definida por el usuario que primero debe definirse y cargarse en la base de datos. Quizás algunas distribuciones sqlite o herramientas GUI lo incluyan de forma predeterminada, pero mi instalación de Ubuntu no. La solución fue
sudo apt-get install sqlite3-pcre
que implementa expresiones regulares de Perl en un módulo cargable en/usr/lib/sqlite3/pcre.so
Para poder utilizarlo hay que cargarlo cada vez que abres la base de datos:
.load /usr/lib/sqlite3/pcre.so
O podrías poner esa línea en tu ~/.sqliterc
.
Ahora puedes consultar así:
SELECT fld FROM tbl WHERE fld REGEXP '\b3\b';
Si desea consultar directamente desde la línea de comandos, puede usar el -cmd
modificador para cargar la biblioteca antes de su SQL:
sqlite3 "$filename" -cmd ".load /usr/lib/sqlite3/pcre.so" "SELECT fld FROM tbl WHERE fld REGEXP '\b3\b';"
Si está en Windows, supongo que debería haber un archivo .dll similar disponible en alguna parte.
SQLite3 admite el operador REGEXP:
WHERE x REGEXP <regex>
http://www.sqlite.org/lang_expr.html#regexp