Функция contains (XQuery)
Возвращает значение типа xs:boolean, показывающее, содержит ли строка, указанная в аргументе $arg1, подстроку, указанную в аргументе $arg2.
Синтаксис
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?
Аргументы
- $arg1
Строка для проверки.
- $arg2
Подстрока для поиска.
Замечания
Если $arg2 является строкой нулевой длины, функция возвратит значение True. Если $arg1 является строкой нулевой длины, а $arg2 — нет, функция возвратит значение False.
Если аргумент $arg1 или $arg2 представляет собой пустую последовательность, он рассматривается как строка нулевой длины.
Функция contains() использует для сравнения строк параметры сортировки в Юникоде для XQuery по умолчанию.
Длина искомой подстроки, указанной в качестве аргумента $arg2, не должна превышать 4 000 символов. Если длина указанной строки превышает 4 000 символов, возникнет динамическое условие ошибки и функция contains() вернет пустую последовательность вместо логического значения True или False. SQL Server 2005 не создает динамических ошибок в выражениях XQuery.
Примеры
В этом разделе рассматриваются примеры на языке XQuery, работающие с экземплярами XML, хранимыми в различных столбцах типа xml в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов xml-данных в базе данных AdventureWorks.
А. Использование функции contains() языка XQuery для поиска указанной строки
В следующем запросе осуществляется поиск продуктов, описание которых содержат слово «Aerodynamic». Для таких продуктов запрос возвращает идентификатор и элемент <Summary
>.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Prod>
{ /pd:ProductDescription/@ProductModelID }
{ /pd:ProductDescription/pd:Summary }
</Prod>
') as Result
FROM Production.ProductModel
where CatalogDescription.value('
contains( (/pd:ProductDescription/pd:Summary//*/text())[1],
"Aerodynamic")','bit') = 1
Обратите внимание на следующее в предыдущем запросе:
- Документ, описывающий модели продуктов, использует пространства имен. Таким образом, ключевое слово namespace определяет область видимости имен в прологе запроса на языке XQuery.
- Предложение WHERE использует метод value() типа данных xml. Чтобы определить, содержится ли слово Aerodynamic в тексте <
Summary
>, метод value использует функцию contains() языка XQuery. Логическое значение, возвращаемое функцией contain(), преобразуется в значение типа bit. Затем оно сравнивается с 1.
Результат:
ProductModelID Result
-------------- ---------
28 <Prod ProductModelID="28">
<pd:Summary xmlns:pd=
"https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<p1:p xmlns:p1="http://www.w3.org/1999/xhtml">
A TRUE multi-sport bike that offers streamlined riding and
a revolutionary design. Aerodynamic design lets you ride with
the pros, and the gearing will conquer hilly roads.</p1:p>
</pd:Summary>
</Prod>
См. также
Справочник
Применение функций XQuery к типу данных XML