Tipo,
¡Buenas tardes!
Hoy les mostraré cómo eliminar etiquetas HTML de una cadena en SQL Server usando solo T-SQL. Esta función me resultó muy útil, ya que necesitaba incluir una columna en un informe que se exportaba a XLS (Excel), pero esta columna era la descripción HTML de las llamadas generadas por el sistema y en Excel ese montón de etiquetas HTML no se veían muy bien. Fue realmente malo de leer... Fue entonces cuando desarrollé esta función y se la presenté.
Código fuente de la función fncRemove_HTML:
CREATE FUNCTION [dbo].[fncRemove_HTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
-- Substitui a entidade HTML "&" pelo caracter '&'
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&')
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML "<" pelo caracter '<'
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '<')
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML ">" pelo caracter '>'
SET @Start = CHARINDEX('>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '>')
SET @Start = CHARINDEX('>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML "&&" pelo caracter '&'
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&')
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML " " pelo caracter ' '
SET @Start = CHARINDEX(' ', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, ' ')
SET @Start = CHARINDEX(' ', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
END
-- Substitui a tag <br> pela sequência de nova linha (CHR(13) + CHR(10))
SET @Start = CHARINDEX('<br>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, CHAR(13) + CHAR(10))
SET @Start = CHARINDEX('<br>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
END
-- Substitui a tag <br/> pela sequência de nova linha (CHR(13) + CHR(10))
SET @Start = CHARINDEX('<br/>', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, 'CHAR(13) + CHAR(10)')
SET @Start = CHARINDEX('<br/>', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
END
-- Substitui a tag <br /> pela sequência de nova linha (CHR(13) + CHR(10))
SET @Start = CHARINDEX('<br />', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, 'CHAR(13) + CHAR(10)')
SET @Start = CHARINDEX('<br />', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
END
-- Remove os parâmetros contidos nas tags HTML
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = CHARINDEX('>', @HTMLText, CHARINDEX('<', @HTMLText))
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = CHARINDEX('>', @HTMLText, CHARINDEX('<', @HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
Código fuente de la función fncRemove_Formatacao_Html
Otra forma de eliminar etiquetas HTML y formato de una cadena es usar la función fncRemove_Formatacao_Html, que demuestro a continuación.
CREATE FUNCTION [dbo].[fncRemove_Formatacao_Html] (
@pe_sTexto VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE
@v_sTexto VARCHAR(MAX),
@v_iPosicaoInicio INT = 0,
@v_iPosicaoFim INT = 0,
@v_iTotalPosicoes INT = 0
SET @v_sTexto = @pe_sTexto
SET @v_sTexto = REPLACE(@v_sTexto, '<BR><BR><BR>', '<BR>')
SET @v_sTexto = REPLACE(@v_sTexto, '<BR><BR>', '<BR>')
SET @v_sTexto = REPLACE(@v_sTexto, '<BR>', '. ')
WHILE (1 = 1)
BEGIN
SET @v_iPosicaoInicio = PATINDEX('%<%', @v_sTexto)
SET @v_iPosicaoFim = ISNULL(NULLIF(PATINDEX('%>%', @v_sTexto), 0), LEN(@v_sTexto))
SET @v_iTotalPosicoes = ((@v_iPosicaoFim - @v_iPosicaoInicio) + 1)
IF (@v_iPosicaoFim<@v_iPosicaoInicio)
SET @v_sTexto = SUBSTRING(@v_sTexto, 1, @v_iPosicaoFim-1)+SUBSTRING(@v_sTexto, @v_iPosicaoFim+1, LEN(@v_sTexto))
ELSE
IF (@v_iPosicaoInicio <> 0)
SET @v_sTexto = REPLACE(@v_sTexto, SUBSTRING(@v_sTexto, @v_iPosicaoInicio, @v_iTotalPosicoes), '')
ELSE
BREAK;
SET @v_iPosicaoInicio = 0
SET @v_iPosicaoFim = 0
SET @v_iTotalPosicoes = 0
END
SET @v_sTexto = REPLACE(@v_sTexto, '..', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ',.', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '?.', '? ')
SET @v_sTexto = REPLACE(@v_sTexto, '!.', '! ')
SET @v_sTexto = REPLACE(@v_sTexto, ',.', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '.. ', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ',. ', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '?. ', '? ')
SET @v_sTexto = REPLACE(@v_sTexto, '!. ', '! ')
SET @v_sTexto = REPLACE(@v_sTexto, ',. ', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '. ', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ', ', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '? ', '? ')
SET @v_sTexto = REPLACE(@v_sTexto, '! ', '! ')
SET @v_sTexto = REPLACE(@v_sTexto, ' . ', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ' ', '')
SET @v_sTexto = RTRIM(@v_sTexto)
SET @v_sTexto = LTRIM(@v_sTexto)
RETURN @v_sTexto
END
Si quieres usar esta misma función, pero con el código fuente en C# y usándolo en el CLR, para un rendimiento mucho mejor, mira el post SQL Server: cómo convertir una cadena HTML en texto (eliminar etiquetas HTML) usando CLR (C#).
¡Un abrazo y hasta luego!


Comentários (0)
Carregando comentários…