Удаление HTML тегов из строки в SQL Server: решение на T-SQL
Быстрый ответ
Чтобы мгновенно очистить строку от HTML-тегов в SQL Server, воспользуйтесь сочетанием функций WHILE loop, PATINDEX и STUFF:
DECLARE @Html NVARCHAR(MAX) = '<p>Некий <b>HTML</b> контент.</p>';
WHILE PATINDEX('%<%>%', @Html) > 0
SET @Html = STUFF(@Html, PATINDEX('%<%>%', @Html), CHARINDEX('>', @Html, PATINDEX('%<%>%', @Html)) – PATINDEX('%<%>%', @Html) + 1, '');
SELECT @Html AS CleanText;
В итоге получите: "Некий HTML контент." — теги отсутствуют. Просто и эффективно! Однако, если нам необходимо избавиться от вложенных тегов или HTML-сущностей, подход следует усложнить.
Продвинутые стратегии: XML и пользовательские функции
Применение XML в T-SQL для сложных HTML-структур
Тип данных XML в SQL Server идеально подходит для очистки HTML-тегов и декодирования HTML-сущностей:
DECLARE @Html NVARCHAR(MAX) = '<p>Некий <b>HTML</b> контент & сущности.</p>';
SELECT TRY_CAST('<XML><![CDATA[' + @Html + ']]></XML>' AS XML).value('.', 'NVARCHAR(MAX)') AS CleanText;
Если вы работаете в SQL 2000, замените MAX на (4000) или укажите предельное значение.
Пользовательские функции для сложных задач
Пользовательская функция (UDF) — это гибкий инструмент для тех, кому требуется удалить определённые теги, например <STYLE>
, и настроить её под свои нужды:
CREATE FUNCTION dbo.udf_StripHTML (@HTMLText NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
-- Задаём границы тегов
-- Добавляем обработку исключений для тегов STYLE вместe с содержимым
-- Реализуем циклическое удаление тегов
RETURN @StrippedHTMLText
END
Пользовательские функции (UDFs) универсальны: они подходят для множества сценариев использования и не вносят искажений в данные. Обязательно используйте REPLACE
для корректной обработки HTML-сущностей.
Производительность — всегда в приоритете
Независимо от того, используете ли вы методы XML или Пользовательских функций, проведите тестирование на отрывке данных. Производительность – это ключевой момент, ведь замедленная обработка вряд ли окажется полезной. SQL Server требует разумного подхода для максимально эффективной работы!
Визуализация
Представьте себе процесс как фруктовый салат, оснащенный декорациями, которые символизируют HTML-теги:
Салат с декорациями: 🥗🎀🍎🎈🍇🎉🍌🖼️
Задача SQL Server — избавить салат от декораций, оставив только фруктовый вкус:
SELECT dbo.StripHTMLTags('<b>🍎</b><img src="decor.png">🍇<i>🍌</i>');
-- И вы говорите: "Хочу только фрукты, без декораций!" 🍎🍇🍌
Вот что остаётся после удаления декораций:
Салат без декораций: 🍎🍇🍌
Это как-бы стиль Мари Кондо в области данных, где избавляемся от всего ненужного!
Особенности обработки специальных символов
Обработка символов с диакритическими знаками
SQL Server с лёгкостью справляется со специальными символами, вроде диакритических знаков. Для нормализации воспользуйтесь таким методом:
SELECT REPLACE(@Html COLLATE Latin1_General_BIN, 'é', 'e') AS NormalizedText;
Функция collate — незаменимый инструмент при работе с текстовыми данными.
HTML-сущности при конвертации
При работе с HTML-тегами нам часто приходится иметь дело с HTML-сущностями, которые требуют преобразования. Это можно осуществить следующим образом:
SET @Html = REPLACE(@Html, '&', '&');
SET @Html = REPLACE(@Html, '<', '<');
-- И так далее, меняйте все сущности, как настоящий супергерой!
Такие преобразования помогают сохранить оригинальный смысл текста.
Удаление HTML-тегов без создания пользовательских функций
Если вы не желаете использовать пользовательские функции, можно применить метод TRY_CAST и XML для удаления HTML-тегов. Инструкции крайне сжаты:
SELECT TRY_CAST(@Html AS XML).value('(/text())[1]', 'VARCHAR(MAX)') AS PlainText;
Это преобразует текст в формат без тегов, избавляя от необходимости в дополнительных функциях. Эффективное и изящное решение, не так ли?
Полезные материалы
- SQL Html Agility Pack для работы с HTML — репозиторий GitHub Html Agility Pack, .NET-библиотека для парсинга HTML.