CONCAT (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric
Questa funzione restituisce una stringa risultante dalla concatenazione o unione in join end-to-end di due o più valori di stringa.
Nota
Per aggiungere un valore di separazione durante la concatenazione, usare CONCAT_WS.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
CONCAT ( argument1 , argument2 [ , argumentN ] ... )
Argomenti
argument1, argument2 [ , argumentN ]
Espressione di qualsiasi valore stringa. La funzione CONCAT
richiede almeno due argomenti e non più di 254 argomenti.
Tipi restituiti
Valore stringa la cui lunghezza e tipo dipendono dall'input.
Osservazioni:
CONCAT
accetta un numero variabile di argomenti stringa e li concatena in una singola stringa. Richiede almeno due valori di input; in caso contrario, CONCAT
genera un errore. CONCAT
converte in modo implicito tutti gli argomenti nei tipi di stringa prima della concatenazione. CONCAT
converte in modo implicito i valori Null in stringhe vuote. Se riceve argomenti con tutti i valori, restituisce una stringa vuota di tipo varchar(1).If CONCAT
receives arguments with all NULL
values, it returns an empty string of type varchar(1). Per la conversione implicita in stringhe vengono seguite le regole esistenti per le conversioni dei tipi di dati. Per altre informazioni sulle conversioni dei tipi di dati, vedere CAST e CONVERT (Transact-SQL).
Il tipo restituito dipende dal tipo degli argomenti. Nella tabella seguente viene illustrato il mapping:
Input type | Tipo di output e lunghezza |
---|---|
1. Qualsiasi argomento di un tipo di sistema SQL-CLR, un tipo definito dall'utente di SQL-CLR o nvarchar(max) | nvarchar(max) |
2. In caso contrario, qualsiasi argomento di tipo varbinary(max) o varchar(max) | varchar(max), a meno che uno dei parametri non sia un tipo nvarchar di qualsiasi lunghezza. In questo caso CONCAT restituisce un risultato di tipo nvarchar(max). |
3. In caso contrario, qualsiasi argomento di tipo nvarchar di un massimo di 4000 caratteri (nvarchar(<= 4000)) | nvarchar(<= 4000) |
4. In tutti gli altri casi | qualsiasi argomento di tipo varchar di un massimo di 8000 caratteri (varchar(<= 8000)), a meno che uno dei parametri non sia un valore nvarchar di qualsiasi lunghezza. In questo caso, CONCAT restituisce un risultato di tipo nvarchar(max). |
Quando CONCAT
riceve argomenti di input nvarchar di lunghezza <= 4000 caratteri, o argomenti di input varchar di lunghezza <= 8000 caratteri, le conversioni implicite possono influire sulla lunghezza del risultato. Gli altri tipi di dati hanno lunghezze diverse quando vengono convertiti in modo implicito in stringhe. Ad esempio, un valore int con valore 14
ha una lunghezza di stringa pari a 2, mentre un valore float con valore 1234.56789
ha una lunghezza di stringa pari a 7 (1234.57
). Pertanto, una concatenazione di questi due valori restituisce un risultato con lunghezza non inferiore a 9 caratteri.
Se nessuno degli argomenti di input ha un tipo LOB (Large Object) supportato, il tipo restituito tronca a 8.000 caratteri, indipendentemente dal tipo restituito. Questo troncamento consente di risparmiare spazio e di generare il piano in modo efficiente.
CONCAT
può essere eseguito in remoto in un server collegato che esegue SQL Server 2012 (11.x) e versioni successive. Per i server collegati meno recenti, l'operazione CONCAT
verrà eseguita localmente, dopo che il server collegato restituisce i valori non concatenati.
Esempi
R. Usare CONCAT
SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;
Il set di risultati è il seguente.
Result
--------------------
Happy Birthday 11/25
B. Usare CONCAT con valori NULL
CREATE TABLE #temp (
emp_name NVARCHAR(200) NOT NULL,
emp_middlename NVARCHAR(200) NULL,
emp_lastname NVARCHAR(200) NOT NULL
);
INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');
SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;
Il set di risultati è il seguente.
Result
------------
NameLastname