+ (Concatenación de cadenas) (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en 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  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

expression
Es cualquier expresión válida de uno de los tipos de datos de la categoría de tipos de datos de caracteres o binarios 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.

Debe utilizarse una conversión explícita a datos caracteres cuando se concatenan cadenas binarias y cualesquiera caracteres entre las cadenas binarias. En el ejemplo siguiente se muestra cuándo se debe usar CONVERT o CAST con la concatenación binaria y cuándo no es necesario usar CONVERT o CAST.

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  
-- 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))  

Tipos de resultado

Devuelve el tipo de datos del argumento con la mayor prioridad. Para obtener más información, vea Prioridad de tipo de datos (Transact-SQL).

Observaciones

El operador + (Concatenación de cadenas) se comporta de modo distinto cuando trabaja con una cadena vacía de longitud cero que cuando trabaja con valores NULL 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. Si trabaja con cadenas de valor NULL, el resultado de la concatenación depende de la configuración de la sesión. Al igual que en las operaciones aritméticas realizadas con valores NULL, si se agrega un valor NULL a un valor conocido, el resultado suele ser un valor desconocido y la operación de concatenación de cadenas que se realiza con un valor NULL también debe generar un resultado NULL. No obstante, puede modificar este comportamiento si cambia la configuración de CONCAT_NULL_YIELDS_NULL para la sesión actual. Para obtener más información, vea SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

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 una de las cadenas concatenadas como mínimo es un tipo de valor grande, no se produce el truncamiento.

Ejemplos

A. Usar la concatenación de cadenas

En el siguiente ejemplo se crea una sola columna en el encabezado de columna Name de varias columnas de caracteres, con el apellido de la persona seguido de una coma, un solo espacio y, a continuación, el nombre de la persona. El conjunto de resultados está en orden alfabético ascendente por el apellido y, a continuación, por el nombre.

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + FirstName) AS Name  
FROM Person.Person  
ORDER BY LastName ASC, FirstName ASC;  

B. Combinar los tipos de datos numeric y date

En el siguiente ejemplo se usa la función CONVERT para concatenar los tipos de datos numeric y date.

-- Uses AdventureWorks  
  
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)  
FROM Sales.SalesOrderHeader  
WHERE SalesOrderID = 50001;  
GO  

El conjunto de resultados es el siguiente:

------------------------------------------------  
The order is due on 04/23/2007  
(1 row(s) affected)

C. Usar la concatenación de varias cadenas

En el siguiente ejemplo se concatenan varias cadenas para formar una cadena larga que muestra el apellido y la primera inicial de los vicepresidentes de Adventure Works Cycles. Se agrega una coma después del apellido y un punto después de la primera inicial.

-- Uses AdventureWorks  
  
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  

El conjunto de resultados es el siguiente:

Name               Title  
-------------      ---------------`  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

(3 row(s) affected)

D. Usar cadenas grandes en una 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 16000, porque la evaluación de la expresión comienza por la izquierda, esto es, @x + @z + @y => (@x + @z) + @y. En este caso, el resultado de (@x + @z) se trunca a 8000 bytes y, luego, @y se suma al conjunto de resultados, lo que hace que la longitud final de la cadena sea 16000. Como @y es una cadena de tipo de valor grande, no se produce ningún 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

El conjunto de resultados es el siguiente:

y        
-------  
16000  
 
(1 row(s) affected)

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

E. Usar la concatenación de varias cadenas

En el siguiente ejemplo se concatenan varias cadenas para formar una cadena larga que muestra el apellido y la primera inicial de los vicepresidentes en una base de datos de ejemplo. Se agrega una coma después del apellido y un punto después de la primera inicial.

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title  
FROM DimEmployee  
WHERE Title LIKE '%Vice Pres%'  
ORDER BY LastName ASC;  

El conjunto de resultados es el siguiente:

Name               Title                                           
-------------      ---------------  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

Consulte también

+= (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)