Condividi tramite


Funzioni su valori stringa - concat

Si applica a: SQL Server

Accetta zero o più stringhe come argomenti e restituisce una stringa creata concatenando i valori di ognuno di questi argomenti.

Sintassi

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

Argomenti

$string
Stringa facoltativa per la concatenazione.

Osservazioni:

La funzione richiede almeno due argomenti. Se un argomento è costituito da una sequenza vuota, viene considerato come stringa di lunghezza zero.

Caratteri supplementari (coppie di surrogati)

Il comportamento delle coppie di surrogati nelle funzioni XQuery dipende dal livello di compatibilità del database e, in alcuni casi, dall'URI dello spazio dei nomi predefinito per le funzioni. Per altre informazioni, vedere la sezione "XQuery Functions Are Surrogate-Aware" nell'argomento Modifiche di rilievo alle funzionalità di motore di database in SQL Server 2016. Vedere anche Livello di compatibilità ALTER DATABASE (Transact-SQL) e Regole di confronto e supporto Unicode.

Esempi

In questo argomento vengono forniti esempi XQuery su istanze XML archiviate in varie colonne di tipo xml nel database di esempio AdventureWorks.

R. Utilizzo della funzione XQuery concat() per la concatenazione di stringhe

Per un modello di prodotto specifico, questa query restituisce una stringa creata concatenando il periodo di validità e la descrizione della garanzia. Nel documento di descrizione del catalogo l'elemento è costituito da <WarrantyPeriod> elementi figlio e .<Description> <Warranty>

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  
  

Dalla query precedente si noti quanto segue:

  • Nella clausola SELECT CatalogDescription è una colonna di tipo xml . Pertanto, viene utilizzato il metodo query() (tipo di dati XML), Instructions.query(). L'istruzione XQuery viene specificata come argomento per il metodo di query.

  • Nel documento sul quale viene eseguita la query vengono utilizzati spazi dei nomi. Pertanto, la parola chiave dello spazio dei nomi viene usata per definire il prefisso per lo spazio dei nomi. Per altre informazioni, vedere Prologo XQuery.

Risultato:

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

La query precedente recupera le informazioni relative a un prodotto specifico. La query seguente recupera le stesse informazioni per tutti i prodotti per i quali vengono archiviate descrizioni di catalogo XML. Il metodo exist() del tipo di dati xml nella clausola WHERE restituisce True se il documento XML nelle righe dispone di un <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  
  

Si noti che il valore booleano restituito dal metodo exist() del tipo xml viene confrontato con 1.

Limitazioni di implementazione

Limitazioni:

  • La funzione concat() in SQL Server accetta solo valori di tipo xs:string. Per gli altri valori è necessario eseguire il cast esplicito al tipo xs:string o al tipo xdt:untypedAtomic.

Vedi anche

Funzioni XQuery per il tipo di dati XML