Comparteix a través de


CONCAT (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento 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.

Nota:

Para agregar un valor de separación durante la concatenación, utilice CONCAT_WS.

Convenciones de sintaxis de Transact-SQL

Sintaxis

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

Argumentos

argument1, argument2 [ , argumentN ]

Expresión de cualquier valor de cadena. La función CONCAT 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 toma un número variable de argumentos de cadena y los concatena (o combina) en una sola cadena. Necesita un mínimo de dos valores de entrada; de lo contrario, se produce un error en CONCAT. CONCAT convierte implícitamente todos los argumentos en tipos de cadena antes de la concatenación. CONCAT convierte implícitamente los valores NULL en cadenas vacías. Si CONCAT recibe argumentos en los que todos los valores son NULL, devuelve una cadena vacía de tipo varchar(1). La conversión implícita de cadenas sigue las reglas existentes para las conversiones de tipos de datos. Para más información sobre las conversiones de tipo de datos, vea CAST y CONVERT (Transact-SQL).

El tipo devuelto depende del tipo de los argumentos. En esta tabla se muestra la asignación:

Tipo de entrada Tipo de salida y longitud de datos
1. Cualquier argumento de un tipo de sistema SQL-CLR, un UDT de SQL-CLR o nvarchar(max) nvarchar(max)
2. De lo contrario, cualquier argumento de tipo varbinary(max) o varchar(max) varchar(max), a menos que uno de los parámetros sea un tipo nvarchar de cualquier longitud. En este caso, CONCAT devuelve un resultado de tipo nvarchar (max).
3. De lo contrario, cualquier argumento de tipo nvarchar de 4000 caracteres como máximo [nvarchar(<= 4000)] nvarchar(<= 4000)
4. En todos los demás casos cualquier argumento de tipo varchar de 8000 caracteres como máximo [varchar(<= 8000)], a menos que uno de los parámetros sea un tipo nvarchar de cualquier longitud. En ese caso, CONCAT devuelve un resultado de tipo nvarchar (max).

Cuando CONCAT recibe argumentos de entrada nvarchar de longitud <= 4000 caracteres, o bien argumentos de entrada varchar de longitud <= 8000 caracteres, las conversiones implícitas pueden afectar a la longitud del resultado. Otros tipos de datos tienen otras longitudes cuando se convierten implícitamente a cadenas. Por ejemplo, un tipo int con valor 14 tiene una longitud de cadena de 2, mientras que un tipo float de valor 1234.56789 tiene una longitud de 7 (1234.57). Por tanto, una concatenación de estos dos valores devuelve un resultado con una longitud de no menos de 9 caracteres.

Si ninguno de los argumentos de entrada tiene un tipo de objeto grande (LOB) admitido, el tipo devuelto se trunca a una longitud de 8000 caracteres, independientemente del tipo de valor devuelto. Este truncamiento ahorra espacio y admite la eficacia de la generación de planes.

CONCAT se puede ejecutar de forma remota en un servidor vinculado que ejecute SQL Server 2012 (11.x) y versiones posteriores. Para servidores vinculados anteriores, la operación CONCAT se realizará localmente, después de que el servidor vinculado devuelva los valores no concatenados.

Ejemplos

A. Uso de CONCAT

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

El conjunto de resultados es el siguiente:

Result
--------------------
Happy Birthday 11/25

B. Uso de CONCAT con valores 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;

El conjunto de resultados es el siguiente:

Result
------------
NameLastname