Функция 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 символов, возникнет динамическое условие ошибки и вместо логического значения True или False функция contains() возвращает пустую последовательность. SQL Server не вызывает динамические ошибки в выражениях XQuery.

Чтобы получить результаты сравнения без учета регистра, можно использовать функции upper-case или lower-case.

Дополнительные символы (суррогатные пары)

Поведение суррогатных пар в функциях XQuery зависит от уровня совместимости базы данных и, в некоторых случаях, от URI-кода пространства имен по умолчанию для функций. Дополнительные сведения см. в пункте «Функции XQuery учитывают суррогаты» раздела Критические изменения в функциях компонента ядра СУБД в SQL Server 2014. Также см. разделы Уровень совместимости инструкции ALTER DATABASE (Transact-SQL) и Поддержка параметров сортировки и Юникода.

Примеры

В этом разделе содержатся примеры запросов XQuery к экземплярам XML, хранящимися в различных столбцах типа 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>

См. также

Справочник

Функции XQuery для типа данных xml