Condividi tramite


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