SQL: как против, так и содержит - разные результаты - PullRequest
9 голосов
/ 07 октября 2011

Я запускаю два запроса к таблице.

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, 'STYCAST')

И

SELECT MSDS FROM dbo.MSDSSearch3 WHERE MSDS like '%STYCAST%'

Первый запрос вернет

'STYCAST 50300 LV'

А второйreturn

'STYCAST 50300 LV'
'STYCAST 2851 BLACK'

Кто-нибудь знает, почему подобное возвращает больше значений, чем содержит?Есть ли проблема с тем, как я бегу, содержит?Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Вот аналогичный пост, где перестройка полнотекстового каталога, казалось, решила проблему:

Проблема SQL: Использование CONTAINS () не работает, но LIKE работает нормально

2 голосов
/ 07 октября 2011

CONTAINS - совершенно другая функция, это запрос на основе предикатов для полнотекстовых столбцов; это не функция, определяющая, содержит ли столбец строку.

Для запроса, который вы выполняете, вы можете использовать это:

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, '"STYCAST*"')

Там у вас есть поиск по префиксу, а не поиск по Simple_term, как у вас сейчас.

Подробнее: http://msdn.microsoft.com/en-us/library/ms187787.aspx


Может быть, в том виде, в каком вы его используете, текст «STYCAST 2851 BLACK» не попадает в результаты, потому что в нем содержится на один символ больше, чем «STYCAST 50300 LV», поэтому это совпадение [7 из 17] против a [ 7 из 16 совпадений. Я не уверен, но это могло бы объяснить это странное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...