функция substring (XQuery)
Возвращает часть строки, определенной аргументом $sourceString, начиная с позиции, указанной в аргументе $startingLoc, длиной, указанной в аргументе $length.
Синтаксис
fn:substring($sourceString as xs:string?,
$startingLoc as 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 2012. Также см. разделы Уровень совместимости инструкции ALTER DATABASE (Transact-SQL) и Поддержка параметров сортировки и Юникода.
Ограничения реализации
SQL Server требует, чтобы аргументы $startingLoc и $length parameters имели тип xs:decimal, а не xs:double.
SQL Server позволяет указывать в качестве аргументов $startingLoc и $length пустую последовательность, потому что пустая последовательность может быть результатом сопоставления динамических ошибок с ().
Примеры
В этом разделе представлены примеры запросов XQuery к экземплярам XML, хранящимся в различных столбцах типа xml в базе данных AdventureWorks2012 .
А.Использование функции 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>. Эту функцию необходимо использовать, потому что элемент <Summary> содержит как текст, так и вложенные элементы (элементы в формате html), которые нужно пропустить и вернуть весь текст.
Функция substring() возвращает первые 50 символов из строкового значения, получаемого функцией string().
Промежуточный результат:
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>
...