Comparteix a través de


+ (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 Almacenamiento 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

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 NULLvalores , 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 CONVERTse debe usar , o CAST, con la concatenación binaria y cuando CONVERTno 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 pueden 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 pueden 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