Удалить теги HTML в SQL Server - PullRequest
1 голос
/ 03 июля 2019

Я должен вывести, используя оператор выбора, столбец как varchar, но даже если я преобразую столбец в varchar, он по-прежнему выводит HTML-теги, которые мне не нужны для форматирования / только текст требуется. Большая проблема также заключается в том, что у меня нет разрешения на создание функций, хотя я видел несколько функций на этом сайте, которые позволяют мне создавать функции для решения этой проблемы. У меня ограниченное разрешение на добавление в нашу базу данных, но я пытался использовать временные таблицы и CTE, и у меня есть разрешение на это.

Прямо сейчас я использовал

REPLACE(REPLACE(CONVERT(VARCHAR(8000),Message), CHAR(13),''), CHAR(10),'') 

, чтобы попытаться преобразовать столбец из html в varchar, а также удалить разрывы строк. Он удаляет разрывы строк, которые нам не нужны, но HTML-теги, такие как </font>,</o:p>,</p>,<br/>,&nbsp, и т. Д., Все еще отображаются, когда я вывожу в 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 />

Желаемый вывод: тест Джордж С Test2

1 Ответ

1 голос
/ 03 июля 2019

Это выполнимо без создания Табличной Функции, но НЕ довольно

При перекрестном применении B будет "Очистить строку", для этого может потребоваться некоторое обслуживание.

Перекрестное применение C разделит / проанализирует строку, уменьшит ее до значений между > ... < и затем агрегирует строку.

Вы можете заметить, что char (13) и char (10) НЕ удаляются, а заменяются пробелом. Это должно гарантировать, что замена не разрушительна.

Пример

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...