Функция 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-в базе данных База данных AdventureWorks2008R2. Обзор каждого из этих столбцов см. в разделе Представление типов данных XML в базе данных AdventureWorks2008R2.

А. Использование функции 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 AdventureWorks2008R2;
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>

См. также

Справочник