Fala galera!
Tudo bem com vocês? Espero que sim, hein!

Neste post, vou demonstrar pra vocês como converter uma string HTML para texto (Remover tags HTML) utilizando o CLR (C#). Se você é novo aqui no blog ou nunca ouviu falar de CLR ou não sabe como criar seu primeiro projeto utilizando esta poderosa ferramenta do SQL Server, que permite criar códigos em C# ou VB.NET e executá-los pelo banco de dados, dê uma lista no post Introdução ao SQL CLR (Common Language Runtime) no SQL Server.

Em 2014, eu fiz o post Removendo tags HTML de uma string no SQL Server e por isso, você deve estar se perguntando: “Dirceu, se você já fez um post sobre isso, porquê fazer outro igual utilizando o CLR?” e a resposta para isso é muito simples: Código muito mais simples e PERFORMANCE! Como já expliquei no post SQL Server – Comparação de performance entre Scalar Function e CLR Scalar Function, funções CLR geralmente entregam uma performance MUITO superior a funções UDF T-SQL, chegando a ser até 200 vezes mais rápido.

Código-utilizado para a criação dos registros:

IF (OBJECT_ID('dirceuresende.dbo.Teste_HTML') IS NOT NULL) DROP TABLE dirceuresende.dbo.Teste_HTML
CREATE TABLE dirceuresende.dbo.Teste_HTML (
    texto VARCHAR(MAX)
)
GO

INSERT INTO dirceuresende.dbo.Teste_HTML
SELECT '<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

</body>
</html>' AS texto
FROM sys.objects
GO 40

Para demonstrar a diferença de performance das duas funções, populei uma tabela com apenas 6.000 registros, todos com a mesma string contendo um código HTML básico. E quanto maior o volume de dados, maior será a diferença de performance entre as funções CLR e UDF T-SQL. O resultado vocês podem conferir abaixo:

Comparação da função CLR com a função T-SQL: 173x mais rápida

Código-fonte da função:

Para remover as tags HTML, utilizo o método HtmlDecode da classe WebUtility, que pertence à biblioteca System.Net. Esse método está disponível apenas a partir do .NET Framework 4.0 e por isso, só é possível utilizá-lo no SQL Server 2012 ou superiores (as versões 2005 e 2008 do SQL Server utilizam o .NET Framework 3.5)

O parâmetro Fl_Quebra_Linha serve para substituir a tag <br> (e suas variantes) por uma quebra de linha no texto. Caso você informe o valor 0 (false) nesse parâmetro, as quebras de linha serão substituídas por uma string vazia.

using System;
using System.Net;
using System.Text.RegularExpressions;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static string fncRemove_Html_String(string Ds_String_HTML, bool Fl_Quebra_Linha)
    {

        if (string.IsNullOrEmpty(Ds_String_HTML))
            return null;


        var html = Ds_String_HTML;
        html = WebUtility.HtmlDecode(html);

        if (Fl_Quebra_Linha)
        {
            html = Regex.Replace(html, "<br/>", Environment.NewLine, RegexOptions.IgnoreCase);
            html = Regex.Replace(html, "<br />", Environment.NewLine, RegexOptions.IgnoreCase);
            html = Regex.Replace(html, "<br>", Environment.NewLine, RegexOptions.IgnoreCase);
        }

        html = Regex.Replace(html, " ", " ", RegexOptions.IgnoreCase);
        html = Regex.Replace(html, "<.*?>", string.Empty);

        return html;
    }
}

É isso aí, pessoal!
Espero que tenham gostado do post e até o próximo.

sql server converter convert string text html remover remove tags html para texto plain text

sql server converter convert string text html remover remove tags html para texto plain text