|| (Concatenación de cadenas) (Transact-SQL)
Se aplica a: Azure SQL Database
El ||
operador de canalizaciones de una expresión de cadena concatena dos o más caracteres o cadenas binarias, columnas o una combinación de cadenas y nombres de columna en una expresión (un operador de cadena). Por ejemplo, SELECT 'SQL ' || 'Server';
devuelve SQL Server
.
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 xml, json, 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 (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
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 NULL
valor. Una operación de concatenación de cadenas realizada con un NULL
valor también debe generar un NULL
resultado.
El ||
operador no respeta la SET CONCAT_NULL_YIELDS_NULL
opción y siempre se comporta como si el comportamiento de ANSI SQL está habilitado, lo que produce NULL
si alguna de las entradas es NULL
. Esta es la diferencia principal en el comportamiento entre los operadores de +
concatenación y ||
. 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 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 (LastName
) de la persona seguida de una coma, un único espacio y, a continuación, el nombre (FirstName
) 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 varias concatenaciones de 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
Contenido relacionado
- ||= (asignación compuesta) (Transact-SQL)
- + (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)