Quite often when writing reports that grab data from SharePoint lists, you have to deal with HTML tags showing up in your reports.  This function helps clean that garbage from the fields.

Usage: ,dbo.DeHtmlize(MSP_EpmProject_UserView.[Current Status]) as [Current Status]

USE [ProjectServer_Reporting]
GO
/****** Object:  UserDefinedFunction [dbo].[DeHtmlize]    Script Date: 03/22/2011 11:03:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[DeHtmlize]
(
@HTMLText varchar(MAX)
)
RETURNS varchar(MAX)
AS
BEGIN
DECLARE @Start  int
DECLARE @End    int
DECLARE @Length int

— Replace the HTML entity & with the ‘&’ character (this needs to be done first, as
— ‘&’ might be double encoded as ‘&’)
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

— Replace the HTML entity &lt; with the ‘<‘ character
SET @Start = CHARINDEX(‘&lt;’, @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(‘&lt;’, @HTMLText)
SET @End = @Start + 3
SET @Length = (@End – @Start) + 1
END

— Replace the HTML entity &gt; with the ‘>’ character
SET @Start = CHARINDEX(‘&gt;’, @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(‘&gt;’, @HTMLText)
SET @End = @Start + 3
SET @Length = (@End – @Start) + 1
END

— Replace the HTML entity &amp; with the ‘&’ character
SET @Start = CHARINDEX(‘&amp;amp;’, @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(‘&amp;amp;’, @HTMLText)
SET @End = @Start + 4
SET @Length = (@End – @Start) + 1
END

— Replace the HTML entity &nbsp; with the ‘ ‘ character
SET @Start = CHARINDEX(‘&nbsp;’, @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(‘&nbsp;’, @HTMLText)
SET @End = @Start + 5
SET @Length = (@End – @Start) + 1
END

— Replace any <br> tags with a newline
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

— Replace any <br/> tags with a newline
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

— Replace any <br /> tags with a newline
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 anything between comments <!– –>
SET @Start = CHARINDEX(‘<!–‘, @HTMLText)
SET @End = CHARINDEX(‘–>’, @HTMLText, CHARINDEX(‘<!–‘, @HTMLText))
SET @Length = (@End – @Start) + 3

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) + 3
END

— Remove anything between <whatever> tags
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