Функция 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 не формирует динамические ошибки в выражениях XQuery.
Чтобы получить результаты сравнения без учета регистра, можно использовать функции upper-case или lower-case.
Примеры
В этом разделе рассматриваются примеры на языке XQuery, работающие с экземплярами XML, хранящимися в различных столбцах типа xml в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов XML-данных в базе данных AdventureWorks.
А. Использование функции contains() языка XQuery для поиска указанной строки
В следующем запросе выполняется поиск продуктов, сводное описание которых содержат слово «Aerodynamic». Для таких продуктов запрос возвращает идентификатор и элемент <Summary>.
--The product model description document uses
--namespaces. The WHERE clause uses the exit()
--method of the xml data type. Inside the exit method,
--the XQuery contains()function is used to
--determine whether the <Summary> text contains the word
--Aerodynamic.
USE AdventureWorks
GO
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.exist('
/pd:ProductDescription/pd:Summary//text()
[contains(., "Aerodynamic")]') = 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>