删除SQL Server中的HTML标记

删除SQL Server中的HTML标记,sql,sql-server,Sql,Sql Server,我必须使用select语句将一列输出为varchar,但即使我将该列转换为varchar,它仍然输出html标记,我不需要格式化/只需要文本。还有一个大问题是我没有创建函数的权限,尽管我在这个网站上看到了几个函数,它们允许我创建一个函数来解决这个问题。我有有限的权限添加到我们的数据库,但我已经尝试使用临时表和CTE,我有权限这样做 现在我已经用过了 REPLACE(REPLACE(CONVERT(VARCHAR(8000),Message), CHAR(13),''), CHAR(10),'')

我必须使用select语句将一列输出为
varchar
,但即使我将该列转换为
varchar
,它仍然输出html标记,我不需要格式化/只需要文本。还有一个大问题是我没有创建函数的权限,尽管我在这个网站上看到了几个函数,它们允许我创建一个函数来解决这个问题。我有有限的权限添加到我们的数据库,但我已经尝试使用临时表和CTE,我有权限这样做

现在我已经用过了

REPLACE(REPLACE(CONVERT(VARCHAR(8000),Message), CHAR(13),''), CHAR(10),'') 
尝试将列从html转换为varchar,并删除换行符。它删除了我们不想要的换行符,但是HTML标记,如


等。。。在我输出到excel时仍显示

这是我从列中获得的测试输出:

<br /><h1><span style="font-size: x-small"><span style="font-family: Verdana"><u><i><b>test</b></i></u></span></span><u><i><b><br /></b></i></u></h1><div contenteditable="false"><a href="dsi://OpenPatientFolder.671">George C Test2</a>&nbsp;</div><br /><br />

测试



所需输出:
test George C Test2

不需要创建表值函数就可以实现,但它并不漂亮

交叉涂抹B将“清洁管柱”,这可能需要一些维护


交叉应用C将拆分/解析字符串,将其减少到
>之间的值。。。什么过程填充该varchar列?原始数据源是什么?它来自电子病历程序中的内部电子邮件系统,允许格式化和添加超链接。请提供HTML的(简化!)示例。请检查您的HTML,如果它是XHTML(对XML有效)。添加了一个测试输出,我目前得到的和所需的输出
Declare @YourTable table (ID int, [Message] varchar(max))
Insert Into @YourTable values
 (1,'<br /><h1><span style="font-size: x-small"><span style="font-family: Verdana"><u><i><b>test</b></i></u></span></span><u><i><b><br /></b></i></u></h1><div contenteditable="false"><a href="dsi://OpenPatientFolder.671">George C Test2</a>&nbsp;</div><br /><br />')
,(2,'<div><h1>This is the Title</hr><br >The content<br >Extra       Spaces will be trapped.  The End</div>')
,(3,'No HTML Tags')

Select A.id
      ,NewValue = ltrim(rtrim(replace(replace(replace(TxtOnly,' ','†‡'),'‡†',''),'†‡',' ')))
 From  @YourTable A
 Cross Apply ( values ( replace(
                        replace(
                        replace('<fake>'+[Message]+'</fake>'
                        ,char(13),' ')
                        ,char(10),' ') 
                        ,'&nbsp;',' ')   -- May want to add items like &mdash; as -  and &trade; as TM etc...
                      ) 
              ) B(CleanString)
 Cross Apply (
                Select TxtOnly = stuff((Select ' ' +RetVal 
                                         From  (
                                                Select RetSeq 
                                                      ,RetVal = left(RetVal,charindex('<',RetVal+RetVal)-1)
                                                 From  (
                                                        Select RetSeq = row_number() over (order by 1/0)
                                                              ,RetVal = ltrim(rtrim(B.i.value('(./text())[1]', 'varchar(max)')))
                                                        From  ( values (cast('<x>' + replace((Select replace(CleanString,'>','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.'))) as A(x)
                                                        Cross Apply x.nodes('x') AS B(i)
                                                       ) C1
                                                Where charindex('<',RetVal)>1
                                               ) C2
                                         Order By RetSeq
                                         For XML Path(''),TYPE).value('(./text())[1]','varchar(max)')
                                        ,1,1,'') 
             ) C
id  NewValue
1   test George C Test2
2   This is the Title Extra Spaces will be trapped. The End
3   No HTML Tags