Как избежать двойных кавычек внутри полнотекстовой функции SQL "содержит"?
Как избежать двойных кавычек внутри функции MS SQL "содержит"?
SELECT decision
FROM table
WHERE CONTAINS(decision, '34" AND wide')
Обычно содержит () ожидает двойные кавычки, чтобы окружить точную фразу, чтобы соответствовать, но я хочу найти фактический символ двойной кавычки. Я пытался избежать этого с помощью \, `и даже другой двойной кавычки, но ничего из этого не сработало.
PS Я понимаю, что простой пример, подобный этому, можно также сделать с помощью оператора LIKE, но мне нужно использовать функцию полнотекстового поиска. Запрос, который я здесь предоставил, был упрощен от моего фактического запроса в качестве примера.
2 ответа
Из документации:
Пунктуация игнорируется. Следовательно,
CONTAINS(testing, "computer failure")
сопоставляет строку со значением "Где находится мой компьютер? Если найти его будет дорого".
поскольку FULLTEXT
даже не указывает на пунктуацию, вам нужно отфильтровать результаты, используя LIKE
:
SELECT decision
FROM table
WHERE CONTAINS(decision, '34 AND wide')
AND decision LIKE '%34"%'
Это сохранит преимущества полного текста.
Ответ выше не работает в SQL Server 2008, если ваша строка для однозначного числа.
Это работает:
SELECT partdescription
FROM table
WHERE CONTAINS(partdescription, '10')
AND decision LIKE '%10"%'
Это не работает:
SELECT partdescription
FROM table
WHERE CONTAINS(partdescription, '6')
AND decision LIKE '%6"%''
РЕДАКТИРОВАТЬ: объяснение, почему одна цифра не может быть проиндексирована.
Если используется список стоп-слов (или шумовых слов) системы, он содержит каждую из числовых цифр в качестве слов, которые следует игнорировать. Вы можете изменить содержимое списка стоп-слов или отключить стоп-слова.
ALTER FULLTEXT INDEX ON dbo.my_ft_table SET STOPLIST = OFF;
После внесения одного из этих изменений затронутый текст необходимо переиндексировать, прежде чем отдельные цифры станут доступными для поиска. После переиндексации действительно можно будет искать "6".