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