CONCAT_WS (Transact-SQL)
Se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database Azure SQL Instancia administrada punto de conexión de SQL Analytics de Azure Synapse Analytics en Microsoft Fabric Warehouse en Microsoft Fabric
Esta función devuelve una cadena resultante de la concatenación, o la combinación, de dos o más valores de cadena de una manera integral. Separa esos valores de cadena concatenados con el delimitador especificado en el primer argumento de función. (CONCAT_WS
indica concatenar con separador).
Sintaxis
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
Argumentos
separator
Es una expresión de cualquier tipo de carácter (char, nchar, nvarchar o varchar).
argument1, argument2 [ , argumentN ]
Expresión de cualquier valor de cadena. La función CONCAT_WS
requiere al menos dos argumentos y no más de 254 argumentos.
Tipos de valores devueltos
Un valor de cadena cuya longitud y tipo dependen de la entrada.
Observaciones
CONCAT_WS
toma un número variable de argumentos de cadena y los concatena (o combina) en una sola cadena. Separa esos valores de cadena concatenados con el delimitador especificado en el primer argumento de función. CONCAT_WS
requiere un argumento separador y un mínimo de otros dos argumentos de valor de cadena; de lo contrario, CONCAT_WS
genera un error. CONCAT_WS
convierte implícitamente todos los argumentos en tipos de cadena antes de la concatenación.
La conversión implícita de cadenas sigue las reglas existentes para las conversiones de tipos de datos. Para obtener más información sobre las conversiones de tipo de datos y comportamiento, consulte CONCAT (Transact-SQL).
Tratamiento de valores NULL
CONCAT_WS
omite el valor SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
.
Si CONCAT_WS
recibe argumentos en los que todos los valores son NULL
, devuelve una cadena vacía de tipo varchar(1).
CONCAT_WS
omite los valores NULL durante la concatenación y no se agrega el separador entre ellos. Por lo tanto, CONCAT_WS
puede tratar limpiamente la concatenación de cadenas que podrían tener valores "en blanco"; por ejemplo, un segundo campo de dirección. Para obtener más información, vea el ejemplo B.
Si un escenario implica valores nulos separados por un delimitador, considere la función ISNULL. Para obtener más información, vea el ejemplo C.
Ejemplos
A Concatenar valores con separador
En este ejemplo se concatenan tres columnas de la tabla sys.databases
separando los valores con un guion entre espacios (-
).
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
Este es el conjunto de resultados.
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. Omitir valores NULL
En este ejemplo se omiten los valores NULL
de la lista de argumentos y se usa un valor separador de comas (,
).
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
Este es el conjunto de resultados.
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
C. Generación de datos con formato CSV a partir de la tabla
En este ejemplo se utiliza una coma como separador (,
) y se agrega el carácter de retorno de carro CHAR(13)
en el formato de valores separados de la columna del conjunto de resultados.
SELECT STRING_AGG(CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)) AS DatabaseInfo
FROM sys.databases;
Este es el conjunto de resultados.
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS
omite los valores NULL
de las columnas. Encapsule una columna con valores NULL con la función ISNULL
y proporcione un valor predeterminado. Por ejemplo:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''),
ISNULL(containment_desc, 'N/A')
), CHAR(13)) AS DatabaseInfo
FROM sys.databases;