Функции со строковыми значениями — substring
Область применения: SQL Server
Возвращает часть значения $sourceString, начиная с позиции, указанной значением $startingLoc, и продолжается для числа символов, указанных значением $length.
Синтаксис
fn:substring($sourceString as xs:string?,
$startingLoc as xs:decimal?) as xs:string?
fn:substring($sourceString as xs:string?,
$startingLoc as xs:decimal?,
$length as xs:decimal?) as xs:string?
Аргументы
$sourceString
Исходная строка.
$startingLoc
Начальная позиция в исходной строке, с которой начинается подстрока. Если это значение отрицательно или равно нулю, символы возвращаются с начала строки. Если длина $sourceString превышает длину, возвращается строка нулевой длины.
$length
Количество получаемых символов [дополнительно]. Если он не указан, он возвращает все символы из расположения, указанного в $startingLoc до конца строки.
Замечания
Версия этой функции с тремя аргументами возвращает символы строки $sourceString
, позиции которых $p
удовлетворяют следующим условиям:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
Значение $length может быть больше числа символов в значении $sourceString после начальной позиции. В этом случае подстрока возвращает символы до конца $sourceString.
Первый символ строки расположен в позиции 1.
Если значение $sourceString является пустой последовательностью, она обрабатывается как строка нулевой длины. В противном случае, если $startingLoc или $length является пустой последовательностью, возвращается пустая последовательность.
Дополнительные символы (суррогатные пары)
Поведение суррогатных пар в функциях XQuery зависит от уровня совместимости базы данных и, в некоторых случаях, от URI-кода пространства имен по умолчанию для функций. Дополнительные сведения см. в разделе "Функции XQuery с суррогатной поддержкой" статьи "Критические изменения функций ядро СУБД в SQL Server 2016". Дополнительные сведения см. в разделе ALTER DATABASE Compatibility Level (Transact-SQL) и Параметры сортировки и Поддержка Юникода.
Ограничения реализации
SQL Server требует, чтобы параметры $startingLoc и $length были типа xs:decimal вместо xs:double.
SQL Server позволяет $startingLoc и $length быть пустой последовательностью, так как пустая последовательность является возможным значением в результате динамических ошибок, сопоставленных с ().
Примеры
В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типов XML в AdventureWorks2022
базе данных.
А. Использование функции XQuery substring() для получения частичного резюме о модели продукта
Запрос извлекает первые 50 символов текста, описывающего модель продукта, <Summary
> элемент в документе.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Prod>{ substring(string((/pd:ProductDescription/pd:Summary)[1]), 1, 50) }</Prod>
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('/pd:ProductDescription') = 1;
Обратите внимание на следующие данные из предыдущего запроса:
Функция string() возвращает строковое значение<
Summary
> элемента. Эта функция используется, так как элемент содержит текст и подэлементы (элементы форматирования HTML), а также так как <Summary
> эти элементы будут пропускаться и извлекать весь текст.Функция подстроки () извлекает первые 50 символов из строкового значения, полученного строковым ().
Частичный результат:
ProductModelID Result
-------------- ----------------------------------------------------
19 <Prod>Our top-of-the-line competition mountain bike.</Prod>
23 <Prod>Suitable for any type of riding, on or off-roa</Prod>
...