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

Remarks

Версия этой функции с тремя аргументами возвращает символы строки $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 ()Transact-SQL и Параметры сортировки и поддержка Юникода.

Ограничения реализации

SQL Server требует, чтобы параметры $startingLoc и $length были типа xs: Decimal вместо xs: Double.

SQL Server позволяет $startingLoc и $length быть пустой последовательностью, поскольку пустая последовательность является возможным значением в результате возникновения динамических ошибок, сопоставленных с ().

Примеры

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

A. Использование функции 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 символов из строкового значения, полученного строкой ().

Частичный результат:

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>  
...  

См. также:

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