#sql-server #sql-server-2008
#sql-server #sql-server-2008
Вопрос:
У меня есть таблица с одним из столбцов в качестве event_name, который имеет значение / данные «C # для начинающих» в этом столбце. Я пытаюсь выполнить поиск с использованием ключевого слова contains как:
select * from events where company_id = 1 and contains(event_name, '"for"')
но это ничего не возвращает. Я также пытался запросить как
select * from events where company_id = 1 and contains(event_name, '"c#"')
и это тоже не работает (в выходных данных нет). Но когда я изменяю свой запрос как
select * from events where company_id = 1 and contains(event_name, '"beginners"')
or
select * from events where company_id = 1 and contains(event_name, '"c#*"'),
Это дает мне ожидаемый результат.
Затем я попытался:
select * from events where company_id = 1 and contains(event_name, '"for*"')
но это не работает
Я не понимаю, почему происходит сбой, когда я использую «for» или «c #» в contains.
Что я делаю не так?
Ответ №1:
«for» — это стоп-слово на английском языке, поэтому оно не будет проиндексировано в полнотекстовый индекс. Если вы хотите выполнить поиск записей, содержащих определенную строку, используйте LIKE
operator
select * from events where company_id = 1 and event_name LIKE '%for%'
Вы можете просмотреть все стоп-слова для английского языка, выполнив следующий запрос
SELECT stopword
FROM sys.fulltext_system_stopwords ssw
WHERE language_id = 1033
Комментарии:
1. Спасибо! Можете ли вы сказать, почему это приводит к сбою, если я указываю текст как «C #», и не приводит к сбою, когда текст «C # *»?
2. @chaitanya В моем тесте «C #» работает так, как ожидалось. Я не знаю, почему это не работает на твоей стороне.