2016-09-26 3 views
1

Мне нужно написать одну инструкцию SQL, чтобы отобразить все треки с точным словом «право» (включая верхний и нижний регистр) как часть имени в таблице под названием «Трек» , Другими словами, он не будет включать названия дорожек со словами «права» или «праведные» на выходенайти точное слово как часть строки

Я написал это, но я продолжаю получать слова с буквами до или после правильного, например: ярче или прав.

SELECT name 

FROM Track 

WHERE name LIKE "%right%"; 
+0

Вам необходимо сделать MATCH. Сначала вы создаете таблицу FTS, затем выполняете MATCH. Чтобы использовать таблицу FTS, вам нужно определить SQLITE_ENABLE_FTS3 в вашей библиотеке SQLITE. MATCH работает над целым словом и не чувствителен к регистру. – BobRun

ответ

2

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) необходим для нормализации значения в нижнем регистре.

+0

Я не думаю, что он ищет равенства. если поле имени содержит «ПРАВОЙ ЧЕЛОВЕК», то он хочет, чтобы это имя было на выходе. но в соответствии с вашим ответом, который не даст выход правильно? –

+0

Спасибо = кажется, просто ничего не дает, потому что в нем нет треков с только ПРАВИЛЬНЫМ. Я попробовал это до публикации и получил его. Мне нужно получить это с другими словами, но также иметь критерии отсутствия писем до или после ..... это имеет смысл Шверн? –

+0

@DeendayalGarg Это имеет смысл! Я обновил свой ответ. – Schwern

Смежные вопросы