Поделиться через


Функции со строковыми значениями — contains

Область применения: SQL Server

Возвращает значение типа xs:boolean, указывающее, содержит ли значение $arg 1 строковое значение, указанное $arg 2.

Синтаксис

  
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?  

Аргументы

$arg 1
Строка для проверки.

$arg 2
Подстрока для поиска.

Замечания

Если значение $arg 2 является строкой нулевой длины, функция возвращает значение True. Если значение $arg 1 является строкой нулевой длины, а значение $arg 2 не является строкой нулевой длины, функция возвращает false.

Если значение $arg 1 или $arg 2 является пустой последовательностью, аргумент рассматривается как строка нулевой длины.

Функция contains() использует параметры сортировки кодовых точек Юникода языка XQuery по умолчанию для сравнения строк.

Значение подстроки, указанное для $arg 2, должно быть меньше или равно 4000 символам. Если указанное значение больше 4000 символов, возникает динамическое условие ошибки, а функция contains() возвращает пустую последовательность вместо логического значения True или False. SQL Server не вызывает динамические ошибки в выражениях XQuery.

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

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

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

Примеры

В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в базе данных AdventureWorks.

А. Использование функции contains() языка XQuery для поиска указанной строки символов

В следующем запросе выполняется поиск продуктов, сводное описание которых содержат слово «Aerodynamic». Запрос возвращает ProductID и <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 AdventureWorks2022;
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