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 "Le funzioni XQuery sono compatibile con surrogati" nell'argomento Modifiche di rilievo apportate alle funzionalità del 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.