Funções em Valores da Cadeia de Caracteres – substring
Aplica-se: SQL Server
Retorna 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?
Argumentos
$sourceString
Cadeia de caracteres de origem.
$startingLoc
Ponto de partida na cadeia de caracteres de origem do qual a subcadeia de caracteres é iniciada. Se esse valor for negativo ou 0, apenas aqueles caracteres em posições maiores que zero serão retornados. Se for maior que o comprimento do $sourceString, a cadeia de caracteres de comprimento zero será retornada.
$length
[opcional] Número de caracteres a recuperar. Se não for especificado, ele retornará todos os caracteres do local especificado no $startingLoc até o final da cadeia de caracteres.
Comentários
A versão de três argumentos da função retorna os caracteres em $sourceString
cuja posição $p
obedece:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
O valor de $length pode ser maior que o número de caracteres no valor de $sourceString após a posição inicial. Nesse caso, a substring retorna os caracteres até o final de $sourceString.
O primeiro caractere de uma cadeia de caracteres está situado na posição 1.
Se o valor de $sourceString for a sequência vazia, ele será tratado como a cadeia de caracteres de comprimento zero. Caso contrário, se $startingLoc ou $length for a sequência vazia, a sequência vazia será retornada.
Caracteres suplementares (pares substitutos)
O comportamento de pares substitutos em funções XQuery depende do nível de compatibilidade do banco de dados e, em alguns casos, o URI do namespace padrão para funções. Para obter mais informações, consulte a seção "As funções XQuery reconhecem substitutos" no tópico Alterações significativas nos recursos do Mecanismo de Banco de Dados no SQL Server 2016. Consulte também Nível de compatibilidade ALTER DATABASE (Transact-SQL) e Suporte a ordenação e Unicode.
Limitações de implementação
O SQL Server requer 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, pois a sequência vazia é um valor possível como resultado de erros dinâmicos sendo mapeados para ().
Exemplos
Este tópico fornece exemplos de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no AdventureWorks2022
banco de dados.
R. Usando uma função substring() XQuery para recuperar descrições resumidas parciais de modelos de produtos
A consulta recupera os primeiros 50 caracteres do texto que descreve o modelo de 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 na consulta anterior:
A função string() retorna o valor da string do<
Summary
> elemento. Essa função é usada porque o <Summary
> elemento contém o texto e os subelementos (elementos de formatação html) e porque você ignorará esses elementos e recuperará todo o texto.A função substring() recupera os primeiros 50 caracteres do valor da string recuperado 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>
...