Функции со строковыми значениями — substringFunctions on String Values - substring

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

Возвращает часть значения $sourceString, начиная с позиции, указанной значением $startingLoc, и продолжится для числа символов, указанного значением $length.Returns part of the value of $sourceString, starting at the position indicated by the value of $startingLoc, and continues for the number of characters indicated by the value of $length.

СинтаксисSyntax

  
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?  

АргументыArguments

$sourceString$sourceString
Исходная строка.Source string.

$startingLoc$startingLoc
Начальная позиция в исходной строке, с которой начинается подстрока.Starting point in the source string from which the substring starts. Если это значение отрицательно или равно нулю, символы возвращаются с начала строки.If this value is negative or 0, only those characters in positions greater than zero are returned. Если значение превышает длину $sourceString, возвращается строка нулевой длины.If it is greater than the length of the $sourceString, the zero-length string is returned.

$length$length
Количество получаемых символов [дополнительно].[optional] Number of characters to retrieve. Если не указано, возвращаются все символы из расположения, указанного в $startingLoc вплоть до конца строки.If not specified, it returns all the characters from the location specified in $startingLoc up to the end of string.

ПримечанияRemarks

Версия этой функции с тремя аргументами возвращает символы строки $sourceString, позиции которых $p удовлетворяют следующим условиям:The three-argument version of the function returns the characters in $sourceString whose position $p obeys:

fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)

Значение $length может быть больше числа символов в значении $sourceString после начальной должности.The value of $length can be greater than the number of characters in the value of $sourceString following the start position. В этом случае подстрока возвращает символы до конца $sourceString.In this case, the substring returns the characters up to the end of $sourceString.

Первый символ строки расположен в позиции 1.The first character of a string is located at position 1.

Если значение $sourceString является пустой последовательностью, оно обрабатывается как строка нулевой длины.If the value of $sourceString is the empty sequence, it is handled as the zero-length string. В противном случае, если либо $startingLoc , либо $length является пустой последовательностью, возвращается пустая последовательность.Otherwise, if either $startingLoc or $length is the empty sequence, the empty sequence is returned.

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

Поведение суррогатных пар в функциях XQuery зависит от уровня совместимости базы данных и, в некоторых случаях, от URI-кода пространства имен по умолчанию для функций.The behavior of surrogate pairs in XQuery functions depends on the database compatibility level and, in some cases, on the default namespace URI for functions. Дополнительные сведения см. в разделе "функции XQuery, поддерживающие суррогаты" в разделе критические изменения ядро СУБД функций в SQL Server 2016.For more information, see the section "XQuery Functions Are Surrogate-Aware" in the topic Breaking Changes to Database Engine Features in SQL Server 2016. См. также раздел уровень совместимости ALTER database ()Transact-SQL и Параметры сортировки и поддержка Юникода.Also see ALTER DATABASE Compatibility Level (Transact-SQL) and Collation and Unicode Support.

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

SQL Server требует, чтобы параметры $startingLoc и $length были типа xs: Decimal вместо xs: Double.SQL Server requires the $startingLoc and $length parameters to be of type xs:decimal instead of xs:double.

SQL Server позволяет $startingLoc и $length быть пустой последовательностью, поскольку пустая последовательность является возможным значением в результате возникновения динамических ошибок, сопоставленных с ().SQL Server allows $startingLoc and $length to be the empty sequence, because the empty sequence is a possible value as a result of dynamic errors being mapped to ().

ПримерыExamples

В этом разделе приведены примеры запросов XQuery к экземплярам XML, хранящимся в различных столбцах типа XML в AdventureWorks2012AdventureWorks2012 базе данных.This topic provides XQuery examples against XML instances stored in various xml type columns in the AdventureWorks2012AdventureWorks2012 database.

A.A. Использование функции XQuery substring() для получения частичного резюме о модели продуктаUsing the substring() XQuery function to retrieve partial summary product-model descriptions

Запрос получает первые 50 символов текста, описывающего модель продукта, Summary элемент <> в документе.The query retrieves the first 50 characters of the text that describes the product model, the <Summary> element in the document.

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;  

Обратите внимание на следующие данные из предыдущего запроса:Note the following from the previous query:

  • Функция String () возвращает строковое значение Summary элемента<>.The string() function returns the string value of the<Summary> element. Эта функция используется, поскольку Summary элемент <> содержит как текст, так и вложенные элементы (элементы форматирования HTML), и потому что эти элементы будут пропущены и получен весь текст.This function is used, because the <Summary> element contains both the text and subelements (html formatting elements), and because you will skip these elements and retrieve all the text.

  • Функция substring () извлекает первые 50 символов из строкового значения, полученного строкой ().The substring() function retrieves the first 50 characters from the string value retrieved by the string().

Частичный результат:This is a partial result:

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

См. такжеSee Also

Функции XQuery для типа данных xmlXQuery Functions against the xml Data Type