Следопыт для Microsoft SQL Server 2000

Предикат CONTAINS


Предикат CONTAINS служит для поиска в базе слов или отдельных фраз. С точки зрения языка SQL ключевое слово CONTAINS рассматривается как логическая функция, используемая в разделе WHERE запросов. CONTAINS имеет два параметра: первый указывает на поле таблицы, в котором производится поиск слова или фразы, второй — задает условие поиска. Вот пример простейшего поискового запроса с использованием CONTAINS:

SELECT Header FROM Articles WHERE CONTAINS(Header, 'биржа')

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

будет найдено точно в этой же форме, т.е. другие формы этого слова, такие как бирже или биржей, найдены не будут. Несложно видеть, что в данном случае предикат CONTAINS ведет себя аналогично предикату LIKE. Данный запрос можно было бы переписать и так:

SELECT Header FROM Articles WHERE Header LIKE '%биржа%'

однако функция CONTAINS обеспечивает большую гибкость поиска по сравнению с LIKE.

Первое отличие заключается в том, что вне зависимости от настроек SQL-сервера, функция CONTAINS при поиске не делает различий между заглавными и строчными буквами (case insensitive search). Другое отличие рассмотрим на примере поиска словосочетания фондовый рынок:

SELECT Header FROM Articles WHERE CONTAINS(Header, '”Фондовый рынок”')

Данный запрос выдаст статьи, содержащие указанную фразу, причем при поиске будет совершенно не важно каким количеством пробелов разделены эти два слова. Более того, при поиске не будут учтены запятые, дефисы, точки и другие разделительные знаки. Нужно отметить, что такой запрос с помощью LIKE построить уже затруднительно. Однако это далеко не все возможности CONTAINS.

CONTAINS позволяет проводить поиск слов и фраз сразу по всем текстовым полям таблицы. Для этого необходимо указать в качестве первого параметра символ ‘*’. Так, для того чтобы найти словосочетание фондовый рынок во всей таблице Articles нужно выполнить SQL-оператор:

SELECT Header, Body FROM Articles WHERE CONTAINS(*, '”Фондовый

рынок”')

Далее, функция CONTAINS позволяет объединять разыскиваемые слова и фразы логическими операторами AND, AND NOT и OR. Так, запрос

SELECT Header FROM Articles WHERE CONTAINS(Header, 'Доллар AND курс')

вернет заголовки статей, в которых встречается одновременно и слово доллар, и слово курс.



Содержание раздела