Published on

July 12, 2017

Использование функций регулярных выражений в SQL Server

В этой статье мы рассмотрим использование двух функций, которые используют регулярные выражения (regex) в SQL Server. Регулярные выражения – это мощные инструменты для поиска и манипулирования текстовыми шаблонами. Мы обсудим, как использовать эти функции для замены текста в SQL Server.

Прежде чем мы углубимся в новые функции, давайте кратко упомянем встроенные функции, которые выполняют аналогичные задачи. SQL Server предоставляет функции, такие как LTRIM, RTRIM и TRIM (доступные в SQL Server на Linux и начиная с SQL Server 2017 на Windows) для удаления пробелов с левой, правой или обеих сторон строки. Однако эти функции не обрабатывают несколько пробелов внутри текста. Вот где появляются новые функции.

RgxTrim

Первая функция, которую мы рассмотрим, – это RgxTrim. Эта функция не только удаляет ведущие и завершающие пробелы входной строки, но также заменяет несколько пробелов внутри текста одним пробелом. Чтобы использовать RgxTrim, вам нужно импортировать SqlRegex.dll в вашу базу данных. Вот пример того, как создать функцию RgxTrim:

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

После создания функции RgxTrim вы можете использовать ее в операторе обновления, как любую другую функцию T-SQL.

RgxReplace

Вторая функция, которую мы рассмотрим, – это RgxReplace. Эта функция аналогична встроенной функции REPLACE, но позволяет использовать регулярные выражения для поиска и замены текста. Синтаксис RgxReplace аналогичен REPLACE, с добавлением параметра regex_pattern. Вот пример того, как создать функцию 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 может быть полезен в ситуациях, когда вам нужно скрыть конфиденциальную информацию в текстовом столбце. Например, если у вас есть столбец Description в таблице, который содержит конфиденциальную информацию, такую как номера счетов IBAN, номера кредитных карт или адреса, вы можете использовать RgxReplace для скрытия этой информации. Вот пример запроса, демонстрирующего использование RgxReplace:

SELECT UserID, [Description], dbo.RgxReplace([Description], 'd{4}-?d{4}-?d{4}-?d{4}', 'XXXXXXXXXXXXXXXX') AS [Masked description]
FROM dbo.UserNotes
WHERE dbo.ContainsString([Description], 'd{4}-?d{4}-?d{4}-?d{4}') = 1;

В приведенном выше запросе мы используем RgxReplace для скрытия любых номеров счетов IBAN, найденных в столбце Description. Результат запроса покажет скрытое описание.

Комбинируя регулярные выражения с другими функциями, такими как ContainsString, вы можете выполнять более сложные операции с текстовыми данными.

Подводя итог, функции RgxTrim и RgxReplace предоставляют дополнительные возможности для манипулирования текстом в SQL Server с использованием регулярных выражений. Эти функции могут быть мощным инструментом в ситуациях, когда вам нужно выполнять расширенные операции с текстом. Импортируйте SqlRegex.dll, создайте функции и начните исследовать возможности регулярных выражений в SQL Server!

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.