+ (concatenación de cadenas) (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 Warehouse en Microsoft Fabric Base de datos SQL de Microsoft Fabric
Es un operador de una expresión de cadenas que concatena dos o más cadenas de caracteres o binarias, columnas o una combinación de nombres de columna y cadenas en una expresión (un operador de cadenas). Por ejemplo, SELECT 'book'+'case';
devuelve bookcase
.
Convenciones de sintaxis de Transact-SQL
Sintaxis
expression + expression
Argumentos
expression
Cualquier expresión válida de cualquiera de los tipos de datos de la categoría de tipos de datos binarios y caracteres, excepto los tipos de datos image, ntext o text. Ambas expresiones deben ser del mismo tipo de datos o una se debe poder convertir implícitamente en el tipo de datos de la otra.
Tipos de valores devueltos
Devuelve el tipo de datos del argumento con la mayor prioridad. Para obtener más información, consulte Precedencia de tipos de datos.
Comentarios
Si el resultado de la concatenación de cadenas es superior al límite de 8.000 bytes, el resultado se trunca. Sin embargo, si al menos una de las cadenas concatenadas es un tipo de valor grande, no se produce el truncamiento.
Cadenas y caracteres de longitud cero
El +
operador de concatenación de cadenas se comporta de forma diferente cuando funciona con una cadena vacía de longitud cero que cuando funciona con NULL
valores , o desconocidos. Se puede especificar una cadena de caracteres de longitud cero como dos comillas simples sin caracteres incluidos entre las comillas. Se puede especificar una cadena binaria de longitud cero como 0x
sin ningún valor de byte especificado en la constante hexadecimal. La concatenación de una cadena de longitud cero siempre concatena las dos cadenas especificadas.
Concatenación de valores NULL
Cuando se trabaja con cadenas con un NULL
valor, el resultado de la concatenación depende de la configuración de la sesión. Al igual que con las operaciones aritméticas que se realizan en NULL
valores, cuando se agrega un NULL
valor a un valor conocido, el resultado suele ser un valor desconocido, una operación de concatenación de cadenas realizada con un NULL
valor, también debe generar un NULL
resultado.
No obstante, puede modificar este comportamiento si cambia la configuración de CONCAT_NULL_YIELDS_NULL
para la sesión actual. Para más información, consulte SET CONCAT_NULL_YIELDS_NULL.
Uso de CAST y CONVERT cuando sea necesario
Debe utilizarse una conversión explícita a datos caracteres cuando se concatenan cadenas binarias y cualesquiera caracteres entre las cadenas binarias.
Los ejemplos siguientes muestran cuándo CONVERT
se debe usar , o CAST
, con la concatenación binaria y cuando CONVERT
no es necesario usar , o CAST
.
En este ejemplo, no se requiere ninguna CONVERT
función o CAST
porque en este ejemplo se concatenan dos cadenas binarias.
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2;
En este ejemplo, se requiere una CONVERT
función o CAST
porque en este ejemplo se concatenan dos cadenas binarias más un espacio.
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '
+ CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '
+ CAST(@mybin2 AS VARCHAR(5));
Ejemplos
Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022
o AdventureWorksDW2022
, que se puede descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.
A Uso de la concatenación de cadenas
En el ejemplo siguiente se crea una sola columna bajo el encabezado Name
de columna de varias columnas de caracteres, con el nombre de familia de la persona seguida de una coma, un único espacio y, a continuación, el nombre de la persona. El conjunto de resultados está en orden ascendente alfabético por el nombre de familia y, a continuación, por el nombre.
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. Combinar tipos de datos numéricos y de fecha
En el siguiente ejemplo se usa la función CONVERT
para concatenar los tipos de datos numeric y date.
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Este es el conjunto de resultados.
------------------------------------------------
The order is due on 04/23/2007
C. Uso de la concatenación de varias cadenas
En el ejemplo siguiente se concatenan varias cadenas para formar una cadena larga para mostrar el nombre de familia y la primera inicial de los vicepresidentes en Adventure Works Cycles. Una coma se agrega después del nombre de familia y un punto después de la primera inicial.
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO
Este es el conjunto de resultados.
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. Uso de cadenas grandes en concatenación
En el siguiente ejemplo se concatenan varias cadenas para formar una cadena larga y, luego, se intenta calcular la longitud de la cadena final. La longitud final del conjunto de resultados es de 16 000, ya que la evaluación de expresiones comienza desde la izquierda, es decir, @x
@y
+ @z
+ => (@x + @z
) + . @y
En este caso, el resultado de (@x
+ @z
) se trunca a 8000 bytes y, a continuación @y
, se agrega al conjunto de resultados, lo que hace que la longitud final de la cadena sea de 16 000. Dado que @y
es una cadena de tipo de valor grande, no se produce el truncamiento.
DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO
Este es el conjunto de resultados.
y
-------
16000
Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022
o AdventureWorksDW2022
, que se puede descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.
E. Uso de la concatenación de varias cadenas
En el ejemplo siguiente se concatenan varias cadenas para formar una cadena larga para mostrar el nombre de familia y la primera inicial de los vicepresidentes dentro de una base de datos de ejemplo. Una coma se agrega después del nombre de familia y un punto después de la primera inicial.
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;
Este es el conjunto de resultados.
Name Title
------------- ---------------
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
Contenido relacionado
- || (Concatenación de cadenas) (Transact-SQL)
- += (Asignación de concatenación de cadenas) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- CAST y CONVERT (Transact-SQL)
- Conversión de tipos de datos (Motor de base de datos)
- Tipos de datos (Transact-SQL)
- Expresiones (Transact-SQL)
- Funciones integradas (Transact-SQL)
- Operadores (Transact-SQL)
- SELECT (Transact-SQL)
- Instrucciones SET (Transact-SQL)