Los desarrolladores a menudo trabajan con varios tipos de datos y pueden necesitar convertir datos según los requisitos de sus aplicaciones. En algunos casos, es posible que necesiten reemplazar una parte de una cadena con un carácter específico o otra cadena. Si bien la función REPLACE se puede utilizar para este propósito, no siempre proporciona los resultados deseados cuando se trata de múltiples ocurrencias de caracteres similares.
SQL Server proporciona una función útil llamada STUFF que permite a los desarrolladores reemplazar una subcadena específica con otra cadena. Sin embargo, muchos desarrolladores y DBAs no conocen esta función y sus capacidades.
Descripción general de la función STUFF de SQL
La función STUFF de SQL se puede utilizar para realizar las siguientes tareas:
- Eliminar un número especificado de caracteres de una cadena
- Especificar la posición de inicio en la cadena desde donde se deben eliminar los caracteres
- Reemplazar los caracteres eliminados con una nueva subcadena
La sintaxis de la función STUFF de SQL es la siguiente:
STUFF(expresión_de_carácter, inicio, longitud, nueva_expresión)
Veamos la función STUFF de SQL con algunos ejemplos:
Ejemplo 1: Función STUFF con posición de inicio 1 y sin caracteres eliminados
En este ejemplo, tenemos una cadena “SQL Server” y queremos insertar la palabra “Microsoft” al principio de la cadena sin eliminar ningún carácter:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = 'SQL Server';
SELECT STUFF(@Expresión_De_Carácter, 1, 0, 'Microsoft') AS 'Función STUFF';
La salida de esta consulta será “Microsoft SQL Server”.
Ejemplo 2: Función STUFF con posición de inicio 5, eliminando seis caracteres y reemplazándolos con una subcadena
En este ejemplo, queremos comenzar en la posición 5, eliminar seis caracteres y reemplazarlos con la subcadena “On SQLShack”:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = 'SQL Server';
SELECT STUFF(@Expresión_De_Carácter, 5, 6, 'On SQLShack') AS 'Función STUFF';
Ejemplo 3: Función STUFF con posición de inicio 5, eliminando dos caracteres e insertando una subcadena
En este ejemplo, queremos eliminar solo caracteres específicos de la cadena e insertar la subcadena “AB” en la posición especificada:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = 'SQL Server';
SELECT STUFF(@Expresión_De_Carácter, 5, 2, 'AB') AS 'Función STUFF';
Ejemplo 4: Función STUFF de SQL para eliminar un carácter especial de la cadena
En este ejemplo, queremos eliminar un carácter especial al principio de la cadena:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = '#SQLShack.com';
SELECT STUFF(@Expresión_De_Carácter, 1, 1, '') AS 'Función STUFF';
Ejemplo 5: Función STUFF con un valor de posición de inicio mayor que la longitud de la cadena
Si la posición de inicio especificada es mayor que la longitud de la cadena, la salida de la función STUFF de SQL será NULL:
DECLARE @Expresión_De_Carácter VARCHAR(3);
SET @Expresión_De_Carácter = 'ABC';
SELECT STUFF(@Expresión_De_Carácter, 5, 1, '') AS 'Función STUFF';
Ejemplo 6: Función STUFF con cero como valor de posición de inicio
Si se especifica cero como posición de inicio, la salida de la función STUFF de SQL también será NULL:
DECLARE @Expresión_De_Carácter VARCHAR(3);
SET @Expresión_De_Carácter = 'ABC';
SELECT STUFF(@Expresión_De_Carácter, 0, 1, '') AS 'Función STUFF';
Ejemplo 7: Usar la función STUFF para eliminar e insertar caracteres más allá de la longitud existente
En este ejemplo, eliminaremos 10 caracteres a partir de la posición 9 e insertaremos la subcadena “.com” en la posición 9:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = 'SQLShack@';
SELECT STUFF(@Expresión_De_Carácter, 9, 10, '.com') AS 'Función STUFF';
En este caso, el carácter específico se elimina y se reemplaza con la subcadena, sin ningún error o valor NULL.
Ejemplo 8: Función STUFF con un valor de posición de inicio negativo
Si se especifica un valor negativo en el parámetro de posición de inicio, la salida de la función STUFF de SQL será NULL:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = 'SQLShack@';
SELECT STUFF(@Expresión_De_Carácter, -2, 1, '.com') AS 'Función STUFF';
De manera similar, un valor negativo no se puede usar en el parámetro de longitud, ya que también dará como resultado un valor NULL:
DECLARE @Expresión_De_Carácter VARCHAR(50);
SET @Expresión_De_Carácter = 'SQLShack@';
SELECT STUFF(@Expresión_De_Carácter, 2, -1, '.com') AS 'Función STUFF';
Ejemplo 9: Función STUFF para formatear una fecha del formato DDMMYYYY al formato DD/MM/YYYY
En este ejemplo, tenemos una fecha almacenada en el formato DDMMYYYY y queremos mostrarla en el formato DD/MM/YYYY:
SELECT STUFF(STUFF('30072019', 3, 0, '/'), 6, 0, '/') AS nueva_fecha_formateada;
La salida de esta consulta será “30/07/2019”.
Ejemplo 10: Función STUFF para enmascarar información confidencial
En este ejemplo, tenemos una tabla de clientes que contiene números de cuenta de 10 dígitos. Queremos enmascarar los números de cuenta mostrando solo los últimos tres dígitos:
DECLARE @Número_De_Cuenta VARCHAR(10) = '6782403967';
SELECT STUFF(@Número_De_Cuenta, 1, LEN(@Número_De_Cuenta) - 3, REPLICATE('X', LEN(@Número_De_Cuenta) - 3)) AS Número_De_Cuenta_Enmascarado;
La salida de esta consulta será “XXX2403967”.
Conclusión
En este artículo, exploramos la función STUFF de SQL, que es una herramienta útil para reemplazar subcadenas por otras cadenas en posiciones específicas. Al comprender la sintaxis y los ejemplos proporcionados, los desarrolladores pueden aprovechar el poder de la función STUFF de SQL para manipular cadenas y lograr los resultados deseados.