LIKE предназначено для шаблона. %
означает «ноль или больше символов чего-либо», например, подстановочный знак *
в других системах. name LIKE "%right%"
говорит: «Имя - это слово« право »с чем угодно до и после него». Вот почему вы получаете «яркие» и «права».
С регулярным выражением вы можете написать что-то вроде /\bright\b/
, где \b
означает «разрыв слова». Но SQLite требует, чтобы плагин использовал регулярные выражения, а LIKE
не имеет эквивалента. Все, с чем вам нужно работать, - %
(ноль или более символов) или _
(любой символ). Лучшее, что вы можете сделать, это такие пробелы, как LIKE "% right %"
, но это работает только в том случае, если есть пробелы вокруг «справа». «прямо сейчас» не будет соответствовать.
Если вы хотите выбрать слово «справа» из значений, таких как «правый левый» и «повернуть направо» и «левый правый левый», вам необходимо охватить четыре возможности.
- Это в начале.
- Это в конце.
- Это посередине.
- Это один.
Это означает четыре выражения.
name LIKE "right %" or
name LIKE "% right" or
name LIKE "% right %" or
lower(name) = "right"
LIKE
в SQLite нечувствителен к регистру по умолчанию. =
нет, поэтому lower(name)
необходим для нормализации значения в нижнем регистре.
Вам необходимо сделать MATCH. Сначала вы создаете таблицу FTS, затем выполняете MATCH. Чтобы использовать таблицу FTS, вам нужно определить SQLITE_ENABLE_FTS3 в вашей библиотеке SQLITE. MATCH работает над целым словом и не чувствителен к регистру. – BobRun