Published on

July 12, 2017

Usando funciones de expresiones regulares en SQL Server

En esta publicación del blog, exploraremos el uso de dos funciones que utilizan expresiones regulares (regex) en SQL Server. Las expresiones regulares son herramientas poderosas para buscar y manipular patrones de texto. Discutiremos cómo utilizar estas funciones para reemplazar texto en SQL Server.

Antes de adentrarnos en las nuevas funciones, mencionemos brevemente las funciones incorporadas en SQL Server que sirven para propósitos similares. Las funciones LTRIM y RTRIM se utilizan para eliminar espacios en blanco de los lados izquierdo y derecho de una cadena. A partir de SQL Server 2017 en Windows y SQL Server en Linux, también está disponible la función TRIM, que elimina espacios en blanco de ambos lados de una cadena.

La primera nueva función que exploraremos es RgxTrim(). Esta función no solo elimina los espacios en blanco al principio y al final, sino que también reemplaza múltiples espacios en blanco dentro del texto por un solo espacio en blanco. Para usar RgxTrim(), debes importar el archivo SqlRegex.dll en tu base de datos. Aquí tienes un ejemplo de código para crear la función RgxTrim:

CREATE FUNCTION dbo.RgxTrim(@Text NVARCHAR(max))
RETURNS NVARCHAR(MAX) 
WITH EXECUTE AS CALLER
EXTERNAL NAME SqlRegex.UserDefinedFunctions.RgxTrim;

RgxTrim también puede eliminar múltiples tabulaciones con un solo espacio en blanco en una cadena de entrada. Puedes usar RgxTrim en una instrucción de actualización de la misma manera que cualquier otra función T-SQL.

La segunda función que discutiremos es RgxReplace(). Esta función es similar a la función REPLACE incorporada, pero te permite utilizar patrones de expresiones regulares para buscar y reemplazar texto. La sintaxis de RgxReplace es similar a REPLACE, con un parámetro adicional para el patrón regex:

RgxReplace (string_expression, regex_pattern, string_replacement)

Aquí tienes un ejemplo de código para crear la función RgxReplace:

CREATE FUNCTION [dbo].[RgxReplace](@Text [NVARCHAR](MAX), @pattern [NVARCHAR](MAX), @replacement [NVARCHAR](MAX))
RETURNS [NVARCHAR](MAX) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [SqlRegex].[UserDefinedFunctions].[RgxReplace]

RgxReplace es útil en escenarios donde necesitas buscar patrones específicos en el texto y realizar reemplazos. Por ejemplo, si tienes una tabla con una columna de Descripción que contiene información sensible como cuentas IBAN, números de tarjetas de crédito o direcciones, puedes usar RgxReplace para enmascarar esta información. Aquí tienes un ejemplo de consulta que demuestra el uso de RgxReplace:

SELECT UserID, [Description], dbo.RgxReplace([Description], '\d{4}-?\d{4}-?\d{4}-?\d{4}', 'XXXXXXXXXXXXXXXX') AS [Descripción enmascarada]
FROM dbo.UserNotes
WHERE dbo.ContainsString([Description], '\d{4}-?\d{4}-?\d{4}-?\d{4}') = 1;

En la consulta anterior, estamos buscando filas en la tabla UserNotes que tienen un patrón para una cuenta y reemplazándolo con un valor enmascarado. La función RgxReplace se utiliza para realizar el reemplazo. Como resultado, todas las cuentas IBAN están enmascaradas, mientras que los nombres completos y las direcciones están enmascarados manualmente.

Al combinar patrones regex con otras funciones de SQL Server como ContainsString(), puedes realizar operaciones aún más avanzadas en datos de texto.

Para utilizar la función RgxReplace() en una instrucción de actualización, simplemente trátala como cualquier otra función T-SQL.

En conclusión, las funciones RgxTrim() y RgxReplace() proporcionan capacidades poderosas para manipular texto utilizando expresiones regulares en SQL Server. Estas funciones se pueden utilizar para recortar y reemplazar texto basado en patrones complejos, lo que las convierte en herramientas valiosas para tareas de manipulación de datos.

No dudes en explorar y experimentar con estas funciones en tu entorno de SQL Server. ¡Feliz codificación!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.