Зіставлення зі зразком і вилучення тексту

Завершено

SQL Server 2025 додає нові функції регулярних виразів (REGEXP) і розширює цю SUBSTRING функцію для спрощення роботи зі структурованим текстом. Ці доповнення дозволяють розробникам виконувати гнучкий текстовий пошук, витягувати складні шаблони, а також очищати або перетворювати дані безпосередньо в T-SQL, не покладаючись на сценарії на стороні клієнта або функції CLR.

Огляд функцій зіставлення зі зразками та вилучення тексту

Нове сімейство функцій REGEXP підтримує обчислення регулярних виразів безпосередньо всередині SQL Server. Кожна функція дає змогу виконувати певні текстові операції на основі шаблонів.

REGEXP_LIKE

Перевіряє, чи збігається рядок зі зразком регулярного виразу. Повертає 1, якщо збігається, 0 в іншому випадку.

REGEXP_SUBSTR

Витягує перший підрядок, який відповідає шаблону регулярного виразу. Корисно для отримання конкретної інформації, такої як номери телефонів, дати або адреси електронної пошти.

REGEXP_REPLACE

Шукає в рядку шаблон і замінює всі входження, які відповідають шаблону. Його можна використовувати для очищення та форматування даних.

REGEXP_INSTR

Повертає початкову позицію першого підрядка, яка відповідає шаблону в заданому тексті. Ідеально підходить для пошуку ключових маркерів у структурованому тексті.

REGEXP_COUNT

Підраховує кількість збігів шаблону регулярного виразу в заданому рядку. Цей підрахунок корисний, коли потрібно виміряти частоту шаблону, наприклад підрахувати цифри, слова або символи в тексті.

REGEXP_MATCHES

Повертає всі підрядки, які відповідають шаблону регулярного виразу, як результат таблиці. Використовуйте його, коли вам потрібно кілька захоплень з одного рядка, а не лише з першого збігу.

REGEXP_SPLIT_TO_TABLE

Розбиває рядок на кілька рядків за допомогою роздільника регулярних виразів.

Удосконалення підрядків

Функція SUBSTRING тепер підтримує необов'язковий параметр length. Якщо його пропущено, він автоматично витягується з вказаної початкової позиції до кінця рядка, зменшуючи потребу в ручних обчисленнях LEN().

Разом ці можливості дають змогу шукати, витягувати та маніпулювати текстовими шаблонами безпосередньо в SQL Server 2025 за допомогою стислого та читабельного T-SQL.


Приклад сценарію: вилучення та очищення контактних даних

Маркетингова команда веде базу даних повідомлень клієнтів у стовпці з іменем MessageText. Багато записів містять номери телефонів у різних форматах. З кожного повідомлення потрібно витягти перший номер телефону, нормалізувати його до стандартного формату та виявити повідомлення, які містять невірні номери телефонів.

Приклади даних

Припустимо, у вас є такий зразок даних у таблиці під назвою CustomerMessages:

Ідентифікатор повідомлення Текст повідомлення
1 «Зателефонуйте мені за номером (713) 555-1298 або офісом 555-8811».
2 "Зв'яжіться зі мною: +1-832-555-7821 дякую!"
3 "Мій номер: 713-555-9876 внутрішній 33"
4 "Телефон ще не вказаний".

Запит: ідентифікація, вилучення та стандартизація

-- Extract the first phone number pattern and format it consistently
SELECT MessageID,
       REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') AS RawNumber,
       REGEXP_REPLACE(
           REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}'),
           '\D', ''
       ) AS DigitsOnly,
       CASE 
           WHEN REGEXP_LIKE(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') = 1 THEN 'Valid'
           ELSE 'Missing'
       END AS PhoneStatus
FROM dbo.CustomerMessages;

Результати

Ідентифікатор повідомлення RawNumber Тільки цифри Статус телефону
1 (713) 555-1298 7135551298 Дійсний
2 +1-832-555-7821 18325557821 Дійсний
3 713-555-9876 7135559876 Дійсний
4 НУЛЬ НУЛЬ Відсутні

Цей приклад використовується REGEXP_SUBSTR для вилучення першого відповідного шаблону, REGEXP_REPLACE видалення нечислових символів та REGEXP_LIKE перевірки правильних чисел. Запит стандартизує телефонні номери в узгоджений формат лише з цифрами безпосередньо в T-SQL.


Приклад 2: Розбиття даних за допомогою REGEXP_SPLIT_TO_TABLE та SUBSTRING

Припустимо, в іншій таблиці , , зберігаються відокремлені комами теги, CustomerFeedbackщо описують інтереси клієнтів. Ви хочете розділити їх на окремі рядки та витягнути перше ключове слово для швидкої індексації.

SELECT FeedbackID,
       value AS Tag,
       SUBSTRING(value, 1) AS FirstWord
FROM CustomerFeedback
CROSS APPLY REGEXP_SPLIT_TO_TABLE(Tags, '\s*,\s*');

Цей запит розбиває кожен розділений комами рядок на рядки, використовуючи нову SUBSTRING поведінку (без вказівки довжини), щоб витягнути весь текст, що залишився, з початкової позиції.

Результати

FeedbackID Позначка Перше слово
1 подорожувати подорожувати
1 фотографія фотографія
2 Походи Походи
2 Кемпінг Кемпінг

Зведення

Нові функції REGEXP і вдосконалена функція SUBSTRING у SQL Server 2025 надають власні можливості зіставлення зі зразками та вилучення тексту. Ці доповнення усувають потребу в зовнішній обробці рядків, полегшуючи очищення, аналіз та аналіз текстових даних у движку бази даних. За допомогою цих інструментів розробники можуть спростити конвеєри ETL, покращити якість даних і забезпечити розширену текстову аналітику безпосередньо в T-SQL.