CONCAT_WS (Transact-SQL)
Si applica a: SQL Server 2017 (14.x) e versioni successive database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics 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. Separa tali valori concatenati della stringa con il delimitatore specificato nel primo argomento della funzione. (CONCAT_WS
indica concatenare con separatore.)
Sintassi
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
Argomenti
separator
Espressione di qualsiasi tipo di carattere (char, nchar, nvarchar o varchar).
argument1, argument2 [ , argumentN ]
Espressione di qualsiasi valore stringa. La funzione CONCAT_WS
richiede almeno due argomenti e non più di 254 argomenti.
Tipi restituiti
Valore stringa la cui lunghezza e tipo dipendono dall'input.
Osservazioni:
CONCAT_WS
accetta un numero variabile di argomenti stringa e li concatena in una singola stringa. Separa tali valori concatenati della stringa con il delimitatore specificato nel primo argomento della funzione. CONCAT_WS
richiede un argomento separatore e un minimo di due altri argomenti di valore stringa; in caso contrario, CONCAT_WS
genera un errore. CONCAT_WS
converte in modo implicito tutti gli argomenti nei tipi di stringa prima della concatenazione.
Per la conversione implicita in stringhe vengono seguite le regole esistenti per le conversioni dei tipi di dati. Per altre informazioni sul comportamento e le conversioni dei tipi di dati, vedere CONCAT (Transact-SQL).
Trattamento dei valori NULL
CONCAT_WS
ignora l'impostazione SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
.
Se riceve argomenti con tutti i valori, restituisce una stringa vuota di tipo varchar(1).If CONCAT_WS
receives arguments with all NULL
values, it returns an empty string of type varchar(1).
CONCAT_WS
ignora i valori Null durante la concatenazione e non aggiunge il separatore tra valori Null. CONCAT_WS
può quindi gestire correttamente la concatenazione di stringhe che potrebbero avere valori "vuoti", ad esempio il campo di un secondo indirizzo. Per altre informazioni, vedere Esempio B.
Se uno scenario prevede valori Null separati da un delimitatore, prendere in considerazione la funzione ISNULL . Per altre informazioni, vedere Esempio C.
Esempi
R. Concatenare valori con separatore
In questo esempio vengono concatenate tre colonne dalla sys.databases
tabella, separando i valori con un trattino racchiuso tra spazi (-
).
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
Il set di risultati è il seguente.
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. Ignorare i valori NULL
Questo esempio ignora i NULL
valori nell'elenco degli argomenti e usa un valore separatore virgola (,
).
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
Il set di risultati è il seguente.
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
C. Generare dati in formato CSV dalla tabella
In questo esempio viene utilizzato un valore separatore di virgole (,
) e viene aggiunto il carattere CHAR(13)
di ritorno a capo nel formato dei valori separati dalla colonna del set di risultati.
SELECT STRING_AGG(CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)) AS DatabaseInfo
FROM sys.databases;
Il set di risultati è il seguente.
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS
ignora i NULL
valori nelle colonne. Eseguire il wrapping di una colonna che ammette i valori Null con la funzione ISNULL
e specificare un valore predefinito. Ad esempio:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''),
ISNULL(containment_desc, 'N/A')
), CHAR(13)) AS DatabaseInfo
FROM sys.databases;