Я хотел бы, чтобы достичь следующего (полнотекстовый поиск),Как достичь границы слова в Sqlite Android?
SELECT * FROM tablename where columnname REGEXP '[[:<:]]some string[[:>:]]'
Где я заинтересован только в точных строк (а не только слова) из полного текста столбца.
Я использую точный SQL выше в MySQL и теперь переношу большую часть кода в приложения для Android.
Но я смотрел на различных должностях, где упоминается, что REGEXP не поддерживается в Android Sqlite (например: link1, link2, link3).
Есть ли способ включить REGEXP в Android?
Если нет альтернатив для вышеуказанного SQL?
Спасибо,
EDIT: В настоящее время я получаю следующее исключение при использовании REGEXP в Android,
android.database.sqlite.SQLiteException: no such function: REGEXP (code 1):...
Я понимаю, мы можем использовать GLOB и LIKE (или может быть даже MATCH). Как можно преобразовать columnname REGEXP '[[:<:]]somestring[[:>:]]'
для использования GLOB
и/или LIKE
и/или MATCH
?
РЕШЕНИЕ 1: С @cybersam 'помощь s следующий то, что я использую (после некоторых модификаций)
SELECT * FROM tablename where
(columnname GLOB '*some string*' OR columnname GLOB '*Some string*') AND
(
(
(columnname GLOB '*[^a-zA-Z0-9_]some string[^a-zA-Z0-9_]*' AND
columnname GLOB '*some string[^a-zA-Z0-9_]*' AND
columnname GLOB '*[^a-zA-Z0-9_]some string*')
OR
(columnname GLOB '*[^a-zA-Z0-9_]Some string[^a-zA-Z0-9_]*' AND
columnname GLOB '*Some string[^a-zA-Z0-9_]*' AND
columnname GLOB '*[^a-zA-Z0-9_]Some string*')
)
)
GLOB
чувствителен к регистру, поэтому я есть дополнительный OR
@cybersam' второе решение в моем случае намного быстрее.
РЕШЕНИЕ 2: Для того, чтобы обрабатывать случай сверхчувствительность
SELECT * FROM tablename where
(columnname GLOB '*[sS][oO][mM][eE] [sS][tT][rR][iI][nN][gG]*') AND
(
(
columnname GLOB '*[^a-zA-Z0-9_][sS][oO][mM][eE] [sS][tT][rR][iI][nN][gG][^a-zA-Z0-9_]*' AND
columnname GLOB '*[sS][oO][mM][eE] [sS][tT][rR][iI][nN][gG][^a-zA-Z0-9_]*' AND
columnname GLOB '*[^a-zA-Z0-9_][sS][oO][mM][eE] [sS][tT][rR][iI][nN][gG]*')
)
попробовать это ' \ ' –