使用SQL查询

时间:2017-12-18 09:58:59

标签: sql sql-server-2008-r2

我有一个表,其中内容具有html值并尝试将它们与

连接起来
<ul> <li>

我使用了以下查询

CREATE TABLE #T(Value varchar(1000))
INSERT INTO #T
values('<p><b>AA</b> something 1</p>'),('<p><b>BB</b> something 2</p>'),('<p><b>CC</b> something 3</p>')

select *
from #T


SELECT '<ul>' +STUFF((SELECT '<li>' + Value + '</li>' 
              FROM #T
              FOR XML PATH('')), 1, 0, '') + '</ul>' AS Notes

无论如何都要按原样获取HTML,因此输出将如下所示

<ul>
<li><p><b>AA</b> something 1</p></li>
<li><p><b>BB</b> something 2</p></li>
<li><p><b>CC</b> something 3</p></li>
</ul>

不喜欢

<ul>&lt;li&gt;&lt;p&gt;&lt;b&gt;AA&lt;/b&gt; something 1&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;BB&lt;/b&gt; something 2&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;CC&lt;/b&gt; something 3&lt;/p&gt;&lt;/li&gt;</ul>

1 个答案:

答案 0 :(得分:3)

你得到的结果是这样的,因为没有&gt;和&lt;符号(以及&符号,双引号和Apostrophy)不能按原样存储在XML中,因此它将被转换为某些代码,如&amp; lt; for&lt;。

使用替换函数包装Notes以替换&lt;和&gt;符号

CREATE TABLE #T(Value varchar(1000))
INSERT INTO #T
values('<p><b>AA</b> something 1</p>'),('<p><b>BB</b> something 2</p>'),('<p><b>CC</b> something 3</p>')

;with html
as
(
    SELECT '<ul>' +STUFF((SELECT '<li>' + Value + '</li>' 
              FROM #T
              FOR XML PATH('')), 1, 0, '') + '</ul>' AS Notes
)
select
    Notes = REPLACE(REPLACE(Notes,'&lt;','<'),'&gt;','>')
    from html