Estamos haciendo una consulta a una tabla, y vemos que la tabla tiene un texto. Pero vemos que el propio texto contiene etiquetas HTML que nos molestan o no deberían estar ahí (se aplicarían formatos de cualquier editor de textos WYSIWYG) y cuando vamos a extraer la información nos molesta.
Pero tenemos prisa y tendríamos que modificar o crear un programa y no tenemos tiempo. ¿Qué hacemos? Pues tengo la función que estás buscando, su funcionamiento es pasar un texto por parámetro y eliminar HTML en SQL.
Nota: Este procedimiento sirve para SQL Server.
Características de la función
- Sustituye cualquier carácter especial ASCII por el carácter visible que corresponde. ( ‘ù’ ➜ ‘ù’ )
- Eliminar etiquetas HTML, cualquier etiqueta que lleve los signos <>.
Te dejo una tabla de caracteres ASCII sencilla en la que entenderás después algunos conceptos 😉

Función eliminar HTML
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Funcion que se encarga de decodificar textos en HTML
ALTER FUNCTION [dbo].[eliminarHTML](@HTMLText varchar(MAX))
RETURNS varchar(MAX)
AS
BEGIN
DECLARE @Start int
DECLARE @End int
DECLARE @Length int
-- Sustituye cualquier carácter especial ASCII por el carácter visible que corresponde.
SET @HTMLText = REPLACE(@HTMLText, '<br>', CHAR(13) + CHAR(10))
SET @HTMLText = REPLACE(@HTMLText, '<br/>', CHAR(13) + CHAR(10))
SET @HTMLText = REPLACE(@HTMLText, '&amp;', '&')
SET @HTMLText = REPLACE(@HTMLText, '&', '&')
SET @HTMLText = REPLACE(@HTMLText, '<', '<')
SET @HTMLText = REPLACE(@HTMLText, '>', '>')
SET @HTMLText = REPLACE(@HTMLText, ' ', ' ')
SET @HTMLText = REPLACE(@HTMLText, '€', '€')
SET @HTMLText = REPLACE(@HTMLText, 'ª', 'ª')
SET @HTMLText = REPLACE(@HTMLText, 'º', 'º')
SET @HTMLText = REPLACE(@HTMLText, 'á', 'á')
SET @HTMLText = REPLACE(@HTMLText, 'á', 'á')
SET @HTMLText = REPLACE(@HTMLText, 'é', 'é')
SET @HTMLText = REPLACE(@HTMLText, 'é', 'é')
SET @HTMLText = REPLACE(@HTMLText, 'í', 'í')
SET @HTMLText = REPLACE(@HTMLText, 'í', 'í')
SET @HTMLText = REPLACE(@HTMLText, 'ó', 'ó')
SET @HTMLText = REPLACE(@HTMLText, 'ó', 'ó')
SET @HTMLText = REPLACE(@HTMLText, 'ú', 'ú')
SET @HTMLText = REPLACE(@HTMLText, 'ú', 'ú')
SET @HTMLText = REPLACE(@HTMLText, 'à', 'à')
SET @HTMLText = REPLACE(@HTMLText, 'à', 'à')
SET @HTMLText = REPLACE(@HTMLText, 'è', 'è')
SET @HTMLText = REPLACE(@HTMLText, 'è', 'è')
SET @HTMLText = REPLACE(@HTMLText, 'ì', 'ì')
SET @HTMLText = REPLACE(@HTMLText, 'ì', 'ì')
SET @HTMLText = REPLACE(@HTMLText, 'ò', 'ò')
SET @HTMLText = REPLACE(@HTMLText, 'ò', 'ò')
SET @HTMLText = REPLACE(@HTMLText, 'ù', 'ù')
SET @HTMLText = REPLACE(@HTMLText, 'ù', 'ù')
SET @HTMLText = REPLACE(@HTMLText, 'Á', 'Á')
SET @HTMLText = REPLACE(@HTMLText, 'Á', 'Á')
SET @HTMLText = REPLACE(@HTMLText, 'É', 'É')
SET @HTMLText = REPLACE(@HTMLText, 'É', 'É')
SET @HTMLText = REPLACE(@HTMLText, 'Í', 'Í')
SET @HTMLText = REPLACE(@HTMLText, 'Í', 'Í')
SET @HTMLText = REPLACE(@HTMLText, 'Ó', 'Ó')
SET @HTMLText = REPLACE(@HTMLText, 'Ó', 'Ó')
SET @HTMLText = REPLACE(@HTMLText, 'Ú', 'Ú')
SET @HTMLText = REPLACE(@HTMLText, 'Ú', 'Ú')
SET @HTMLText = REPLACE(@HTMLText, 'À', 'À')
SET @HTMLText = REPLACE(@HTMLText, 'À', 'À')
SET @HTMLText = REPLACE(@HTMLText, 'È', 'È')
SET @HTMLText = REPLACE(@HTMLText, 'È', 'È')
SET @HTMLText = REPLACE(@HTMLText, 'Ì', 'Ì')
SET @HTMLText = REPLACE(@HTMLText, 'Ì', 'Ì')
SET @HTMLText = REPLACE(@HTMLText, 'Ò', 'Ò')
SET @HTMLText = REPLACE(@HTMLText, 'Ò', 'Ò')
SET @HTMLText = REPLACE(@HTMLText, 'Ù', 'Ù')
SET @HTMLText = REPLACE(@HTMLText, 'Ù', 'Ù')
SET @HTMLText = REPLACE(@HTMLText, 'Ç', 'Ç')
SET @HTMLText = REPLACE(@HTMLText, 'ç', 'ç')
SET @HTMLText = REPLACE(@HTMLText, 'Ñ', 'Ñ')
SET @HTMLText = REPLACE(@HTMLText, 'ñ', 'ñ')
SET @HTMLText = REPLACE(@HTMLText, 'Ý', 'Ý')
SET @HTMLText = REPLACE(@HTMLText, 'ý', 'ý')
SET @HTMLText = REPLACE(@HTMLText, '&#iquest;', '¿')
SET @HTMLText = REPLACE(@HTMLText, '¿', '¿')
-- Elimina cualquier cosa entre las etiquetas <>.
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))
ENDImportante: Recuerda que para crear primero la función hay que sustituir ALTER FUNCTION por CREATE FUNCTION, ejecutamos la función y volvemos a dejarlo como ALTER FUNCTION.
Probamos la función
select dbo.eliminarHTML('<strong>Prueba de escritura</strong> en el sofá');
Y nos devuelve…
Prueba de escritura en el sofá
Si te ha gustado esta utilidad de SQL, te recomiendo que visites toda nuestra categoria de SQL . Tenemos más utilidades como estas 😉
2 comentarios en “Eliminar HTML en SQL”
Muy practico y esencial
Muchas gracias!