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 Analyticsin Microsoft FabricWarehouse 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 ] ... )

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

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;

Questo è il set di risultati.

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;

Questo è il set di risultati.

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;

Questo è il set di risultati.

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;