Сравнивать только целые слова с как? - PullRequest
20 голосов
/ 08 июня 2011

Так что 'удивительный документ' LIKE '% doc%' - это правда, потому что doc - это подстрока. Но я хочу, чтобы оно было ложным, в то время как «удивительный док», «док удивительный» или «удивительный док удивительный» должно быть правдой. Как я могу сделать с лайком?

Я использую sqlite, поэтому надеюсь, что мне не придется использовать то, что недоступно.

Ответы [ 6 ]

31 голосов
/ 08 июня 2011

Как насчет разбить его на четыре части -

[MyColumn] Like '% doc %' 
OR [MyColumn] Like '% doc' 
OR [MyColumn] Like 'doc %' 
OR [MyColumn] = 'doc'

Редактировать: Альтернативный подход (только для символов ASCII) может быть:

'#'+[MyColumn]+'#' like '%[^a-z0-9]doc[^a-z0-9]%'

(Вы можете позаботитьсятакже любого специального символа)

Не похоже, но вы можете изучить Полнотекстовый поиск и Содержит , на случай, если это больше подходит дляВаша ситуация.

См .: - MSDN: [] (Подстановочный знак - Соответствующие символы) (Transact-SQL)

6 голосов
/ 08 июня 2011
WHERE (@string LIKE 'doc %' OR @string LIKE '% doc' OR @string LIKE '% doc %' OR @string = 'doc')
2 голосов
/ 07 декабря 2018

Вы можете просто использовать ниже условия:

(' '+YOUR_FIELD_NAME+' ') like '% doc %'

работает быстрее, чем другие решения.

1 голос
/ 08 июня 2011

Вы можете использовать несколько OR, как "% doc%" или как "doc%", или как "% doc", или как "doc"

0 голосов
/ 15 марта 2019

Ни один из ответов не работал для меня (SQL Server 2008 R2).

Но мне удалось заставить его работать, используя некоторые ответы, показанные ниже ..

SELECT * FROM myTable AS v
WHERE v.Note LIKE '%[^a-zA-Z0-9]CONTainers[^a-zA-Z0-9]%'

Примечание: v.Note - это тип данных TEXT

. Это сработало для меня со следующими образцами ..

  • контейнеры
  • КОНТЕЙНЕРЫ
  • conTaInERS

Но не тогда, когда слово «контейнеры» было окружено другими буквами или цифрами ..

  • 001containers001
  • AAcontainersAA

Именно об этом в первую очередь просил ФП.

0 голосов
/ 08 июня 2011

А как же NOT LIKE '%doc%'?

...