Partilhar via


Funções em valores de cadeia de caracteres - substring

Aplica-se a:SQL Server

Devolve parte do valor de $sourceString, começando na posição indicada pelo valor de $startingLoc, e continua para o número de caracteres indicado pelo valor de $length.

Sintaxe

  
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
Cadeia de fonte.

$startingLoc
Ponto de partida na cadeia de origem de onde a subcadeia começa. Se este valor for negativo ou 0, apenas os caracteres em posições superiores a zero são devolvidos. Se for maior do que o comprimento da $sourceString, a corda de comprimento zero é devolvida.

$length
[opcional] Número de caracteres para recuperar. Se não especificado, devolve todos os caracteres da localização especificada em $startingLoc até ao fim da cadeia.

Observações

A versão de três argumentos da função devolve os caracteres cuja $sourceString posição $p obedece:

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

O valor de $length pode ser maior do que o número de caracteres no valor de $sourceString após a posição inicial. Neste caso, a subcadeia devolve os caracteres até ao final de $sourceString.

O primeiro carácter de uma cadeia está localizado na posição 1.

Se o valor de $sourceString for a sequência vazia, é tratado como a sequência de comprimento zero. Caso contrário, se $startingLoc ou $length for a sequência vazia, a sequência vazia é devolvida.

Caracteres suplementares (pares substitutos)

O comportamento dos pares substitutos nas funções XQuery depende do nível de compatibilidade da base de dados e, em alguns casos, do URI padrão do namespace para as funções. Para mais informações, consulte a secção "XQuery Functions Are Surrogate-Aware" no tópico Breaking Changes to Database Engine Features in SQL Server 2016. Veja também o Nível de Compatibilidade do ALTER DATABASE (Transact-SQL) e o Suporte a Coletação e Unicode.

Limitações de implementação

O SQL Server exige que os parâmetros $startingLoc e $length sejam do tipo xs:decimal em vez de xs:double.

O SQL Server permite que $startingLoc e $length sejam a sequência vazia, porque a sequência vazia é um valor possível devido a erros dinâmicos mapeados para ().

Examples

Este tópico fornece exemplos de XQuery contra instâncias XML armazenadas em várias colunas de tipos XML na AdventureWorks2025 base de dados.

A. Usando a função substring() XQuery para recuperar descrições parciais resumidas do modelo produto

A consulta recupera os primeiros 50 caracteres do texto que descreve o modelo do produto, o <Summary> elemento no documento.

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;  

Observe o seguinte da consulta anterior:

  • A função string() devolve o valor da string do<Summary> elemento. Esta função é usada porque o <Summary> elemento contém tanto o texto como os subelementos (elementos de formatação html), e porque irá saltar esses elementos e recuperar todo o texto.

  • A função substring() recupera os primeiros 50 caracteres do valor da string recuperada pela string().

Este é um resultado parcial:

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

Ver também

funções XQuery em relação ao tipo de dados xml