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

Aplica-se a: SQL Server

Aceita zero ou mais cadeias como argumentos e devolve uma cadeia criada pela concatenação dos valores de cada um destes argumentos.

Syntax

  
fn:concat ($string as xs:string?  
           ,$string as xs:string?  
           [, ...]) as xs:string  

Arguments

$string
String opcional para concatenar.

Remarks

A função requer pelo menos dois argumentos. Se um argumento for uma sequência vazia, é tratado como a cadeia de comprimento zero.

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 ALTER DATABASE também Nível de Compatibilidade (Transact-SQL) e Suporte a Colação e Unicode.

Examples

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

A. Usar a função concat() XQuery para concatenar cadeias

Para um modelo de produto específico, esta consulta devolve uma string criada ao concatenar o período de garantia e a descrição da garantia. No documento de descrição do catálogo, o <Warranty> elemento é composto por>WarrantyPeriod< elementos filhos.<Description>

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
SELECT CatalogDescription.query('  
    <Product   
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"  
        ProductModelName = "{ sql:column("PD.Name") }" >  
        {   
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",  
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))   
         }   
     </Product>  
 ') as Result  
FROM Production.ProductModel PD  
WHERE  PD.ProductModelID=28  
  

Observe o seguinte da consulta anterior:

  • Na cláusula SELECT, CatalogDescription é uma coluna do tipo xml . Assim, é utilizado o método query() (tipo de dado XML), Instructions.query(). A instrução XQuery é especificada como o argumento do método de consulta.

  • O documento contra o qual a consulta é executada utiliza namespaces. Portanto, a palavra-chave do espaço de nomes é usada para definir o prefixo do espaço de nomes. Para mais informações, consulte o Prólogo XQuery.

Este é o resultado:

<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>  

A consulta anterior recupera informação para um produto específico. A consulta seguinte recupera a mesma informação para todos os produtos para os quais são armazenadas descrições de catálogos XML. O método exist() do tipo de dado xml na cláusula WHERE devolve True se o documento XML nas linhas tiver um <ProductDescription> elemento.

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
  
SELECT CatalogDescription.query('  
    <Product   
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"   
        ProductName = "{ sql:column("PD.Name") }" >  
        {   
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",  
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))   
         }   
     </Product>  
 ') as Result  
FROM Production.ProductModel PD  
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1  
  

Note-se que o valor booleano devolvido pelo método exist() do tipo xml é comparado com 1.

Limitações de implementação

Estas são as limitações:

  • A função concat() no SQL Server só aceita valores do tipo xs:string. Outros valores têm de ser explicitamente castados para xs:string ou xdt:untypedAtomic.

Ver também

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