Функции со строковыми значениями — 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>