Cuando se trabaja con datos almacenados en bases de datos relacionales, a menudo es necesario concatenar valores en una sola cadena. En Microsoft SQL Server T-SQL, hay varias opciones disponibles para concatenar valores. En este artículo, exploraremos estas opciones y discutiremos su uso.
Concatenación de valores utilizando el operador de concatenación
En cualquier versión de SQL Server, se puede utilizar el signo más (+) como operador de concatenación. Este operador permite concatenar literales de cadena, variables o valores de columna juntos. Aquí hay un ejemplo:
SELECT 'Hola' + ' Mundo' + '!';
También se pueden utilizar variables o valores de columna:
DECLARE @string1 VARCHAR(50) = 'Hola',
@string2 VARCHAR(50) = ' Mundo',
@string3 VARCHAR(50) = '!';
SELECT @string1 + @string2 + @string3;
SELECT NombreCompleto = [Nombre] + ' ' + [Apellido]
FROM [AdventureWorks2017].[Persona].[Persona];
Cuando se concatenan valores, es importante considerar los tipos de datos y utilizar un separador para evitar resultados inesperados. Por ejemplo, al mezclar tipos de datos, es necesario convertir las columnas a cadenas si es necesario:
SELECT Prueba = 'Empleado ' + [Nombre] + ' ' + [Apellido] + ' (ID = ' + CONVERT(VARCHAR(10), [IDEntidadNegocio]) + ')' + ' ha sido modificado en ' + CONVERT(CHAR(10), [FechaModificacion], 23)
FROM [AdventureWorks2017].[Persona].[Persona];
Otra consideración es el manejo de valores NULL. Por defecto, si alguna de las expresiones que se concatenan es NULL, el resultado también será NULL. Para manejar esto, se pueden utilizar las funciones ISNULL o COALESCE:
SELECT NombreCompleto = [Nombre] + ' ' + ISNULL([SegundoNombre], '') + ' ' + [Apellido]
FROM [AdventureWorks2017].[Persona].[Persona];
Concatenación de valores utilizando la función CONCAT
En SQL Server 2012 y versiones posteriores, se puede utilizar la función CONCAT para concatenar múltiples valores de cadena de caracteres. La función CONCAT convierte implícitamente todas las expresiones en valores de cadena dentro de una instrucción SELECT, eliminando la necesidad de conversiones explícitas:
DECLARE @string1 VARCHAR(50) = 'Hola',
@string2 VARCHAR(50) = ' Mundo',
@string3 VARCHAR(50) = '!';
SELECT CONCAT(@string1, @string2, @string3);
SELECT Prueba = CONCAT('Empleado ', [Nombre], ' ', [Apellido], ' (ID = ', [IDEntidadNegocio], ')', ' ha sido modificado en ', [FechaModificacion])
FROM [AdventureWorks2017].[Persona].[Persona];
SELECT NombreCompleto = CONCAT([Nombre], ' ', [SegundoNombre], ' ', [Apellido])
FROM [AdventureWorks2017].[Persona].[Persona];
La función CONCAT también maneja valores NULL convirtiéndolos en cadenas vacías, eliminando la necesidad de ISNULL o COALESCE:
SELECT NombreCompleto = CONCAT([Nombre], ' ', [SegundoNombre], ' ', [Apellido])
FROM [AdventureWorks2017].[Persona].[Persona];
Concatenación de valores utilizando CONCAT_WS
En SQL Server 2017 y versiones posteriores, se puede utilizar la función CONCAT_WS para concatenar valores con un separador especificado. Esta función es útil cuando se tienen múltiples valores de cadena para concatenar y se desea incluir un separador entre cada valor:
SELECT NombreCompleto = CONCAT_WS(' ', [Nombre], [SegundoNombre], [Apellido])
FROM [AdventureWorks2017].[Persona].[Persona];
El uso de CONCAT_WS puede hacer que las expresiones sean más cortas y legibles, especialmente cuando se trata de muchos argumentos.
Caso de uso – Cálculo de un hash de fila
Un caso de uso práctico para la concatenación en SQL Server es el cálculo de un hash de fila. Esto puede ser útil cuando se necesita verificar rápidamente si un registro ha cambiado comparando el hash de la fila actual con una fila entrante. Aquí hay un ejemplo:
SELECT [IDEntidadNegocio], [TipoPersona], [EstiloNombre], [Titulo], [Nombre], [SegundoNombre], [Apellido], [Sufijo], [PromocionEmail], [FechaModificacion],
MiHash = HASHBYTES('SHA2_256', CONCAT_WS('||', [IDEntidadNegocio], [TipoPersona], [EstiloNombre], [Titulo], [Nombre], [SegundoNombre], [Apellido], [Sufijo], [PromocionEmail], [FechaModificacion]))
FROM [AdventureWorks2017].[Persona].[Persona];
En este ejemplo, se utiliza la función HASHBYTES para calcular el hash de los valores concatenados. La función CONCAT_WS se utiliza para concatenar las columnas con un separador de doble tubería (||). Este enfoque permite una comparación eficiente de filas para identificar cambios.
Cuando se utiliza CONCAT_WS o CONCAT, es importante elegir un separador que evite colisiones, donde diferentes filas resulten en el mismo hash. Agregar un separador entre columnas ayuda a prevenir colisiones.
Al comprender las diversas opciones para concatenar valores en SQL Server, se puede manipular y combinar datos de manera efectiva para satisfacer necesidades específicas.
Última actualización del artículo: 2021-10-05