Мне нужно выбрать, который будет возвращать результаты, как это:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
И мне нужны все результаты, т. Е. Сюда входят строки с «word2 word3 word1» или «word1 word3 word2» или любой другой комбинацией из трех.
Все слова должны быть в результате.
word3 word2 word1
.Обратите внимание, что если вы используете,
LIKE
чтобы определить, является ли строка подстрокой другой строки, вы должны экранировать символы, соответствующие шаблону в вашей строке поиска.Если ваш диалект SQL поддерживает
CHARINDEX
, его гораздо проще использовать:Кроме того, имейте в виду, что этот и метод в принятом ответе охватывают только сопоставление подстрок, а не сопоставление слов. Так, например, строка
'word1word2word3'
все равно будет соответствовать.источник
InStr()
вместо этогоCHARINDEX
функция
запрос
источник
Вместо того
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
, чтобы добавить А между этими словами, как:подробности см. здесь https://msdn.microsoft.com/en-us/library/ms187787.aspx.
ОБНОВИТЬ
Для выбора фраз используйте двойные кавычки, такие как:
ps вы должны сначала включить полнотекстовый поиск по таблице, прежде чем использовать содержит ключевое слово. Подробнее см. здесь https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search.
источник
Изменено
OR
наAND
основе редактирования вопроса.источник
Если вы используете Oracle Database , то вы можете добиться этого с помощью содержит запрос. Содержит запросы быстрее, чем запрос.
Если вам нужны все слова
Если вам нужно любое из слов
Содержит индекс необходимости типа КОНТЕКСТ на вашем столбце.
источник
Если вы просто хотите найти совпадение.
SQL Server:
Чтобы получить точное совпадение. Пример
(';a;ab;ac;',';b;')
не получит совпадение.источник
попробуйте использовать «поиск по tesarus» в полнотекстовом индексе в MS SQL Server. Это гораздо лучше, чем использовать «%» в поиске, если у вас есть миллионы записей. Tesarus имеют небольшое потребление памяти, чем другие. попробуйте поискать эту функцию :)
источник
лучший способ сделать полнотекстовый индекс для столбца в таблице и использовать вместо LIKE содержать
источник
почему бы не использовать вместо "в"?
источник
Один из самых простых способов добиться того, что упомянуто в вопросе, - использовать CONTAINS с NEAR или '~'. Например, следующие запросы дадут нам все столбцы, которые конкретно включают в себя word1, word2 и word3.
Кроме того, CONTAINSTABLE возвращает рейтинг для каждого документа на основе близости слов «word1», «word2» и «word3». Например, если документ содержит предложение «Слово1 - это слово2 и слово3», его рейтинг будет высоким, поскольку термины ближе друг к другу, чем в других документах.
Еще одна вещь, которую я хотел бы добавить, - это то, что мы также можем использовать бесконтактный_терм, чтобы найти столбцы, в которых слова находятся на определенном расстоянии между ними внутри фразы столбца.
источник
В идеале это должно быть сделано с помощью полнотекстового поиска сервера SQL при использовании. Однако, если вы по какой-то причине не можете работать с вашей БД, вот решение, требующее высокой производительности:
источник
Это отобразит все записи, где
column1
содержится частичное значениеword
.источник
источник
или
источник