SQL修剪第一个和最后一个字符串指示符的所有内容

时间:2018-04-27 11:50:29

标签: sql sql-server sql-server-2008

我想在SQL中清除包含不需要的标记的列。

数据如下所示:

<"blockquote class="twitter-tweet" data-lang="en"> *some text*  <"/blockquote>
"I must remain" <"blockquote class="twitter-tweet" data-lang="en"> *some text again*<"/blockquote>
"I must remain, too" <"blockquote class="twitter-tweet" data-lang="en"> *some text again*<"/blockquote>

我想从&lt;“blockquote 开始删除所有内容,直到&lt;”/ blockquote&gt; 清理后的数据将变为: “我必须留下来”“我也必须留下来”

我想这样做是一个用于数据清理的SQL函数。

**我想删除从&lt;“blockquote 开始的所有字符串,直到&lt;”/ blockquote&gt; 然后保留它们之间未包含的字符串。

请帮忙。

3 个答案:

答案 0 :(得分:2)

请使用此。 @data是你的字符串:

declare @data_xml xml = replace(@data, '<"', '<');
select convert(nvarchar(max), @data_xml.query('text()'));

完整查询:https://pastebin.com/mJpfmYyQ

答案 1 :(得分:1)

如果对TVF开放......

厌倦了提取字符串(left,right,patindex,substrings,...),我修改了一个解析函数来接受两个非类似的分隔符

作为TVF,它很容易在#chartdiv { width: 100%; height: 200px; }内使用或作为独立使用。

还不清楚您想要的结果。如果你想要一个字符串而不是记录,你可以通过XML STUFF()方法轻松地整合它。

示例

<script src="https://www.amcharts.com/lib/3/amcharts.js"></script>
<script src="https://www.amcharts.com/lib/3/pie.js"></script>
<script src="https://www.amcharts.com/lib/3/plugins/export/export.min.js"></script>
<link rel="stylesheet" href="https://www.amcharts.com/lib/3/plugins/export/export.css" type="text/css" media="all" />
<script src="https://www.amcharts.com/lib/3/themes/light.js"></script>
<h4>Day of a month</h4><input type="range" min="1" max="30" step="1" value="1" onchange="changeDay(this.value)">
<div id="chartdiv"></div>

<强>返回

CROSS APPLY

感兴趣的UDF

Declare @S varchar(max) = '<blockquote class="twitter-tweet" data-lang="en"> *some text*  </blockquote>"I must remain" <blockquote class="twitter-tweet" data-lang="en"> *some text again*</blockquote>"I must remain, too" <blockquote class="twitter-tweet" data-lang="en"> *some text again*</blockquote>'

Select * from [dbo].[tvf-Str-Extract](@S,'blockquote>','<blockquote')

答案 2 :(得分:0)

所以我可以使用下面的查询获得我想要的结果:

DECLARE @Tbl TABLE(VAL VARCHAR(MAX));
INSERT @Tbl VALUES('<"blockquote class="twitter-tweet" data-lang="en"> *some text*  <"/blockquote>
"I must remain" <"blockquote class="twitter-tweet" data-lang="en"> *some text again*<"/blockquote>
"I must remain, too" <"blockquote class="twitter-tweet" data-lang="en"> *some text again*<"/blockquote>');
SELECT 1; --initialize @@ROWCOUNT if necessary. Might be optional depending on need
WHILE @@ROWCOUNT > 0 BEGIN
    UPDATE @Tbl
    SET VAL = STUFF(VAL,CHARINDEX('<"blockquote',VAL),CHARINDEX('<"/blockquote>',VAL) - CHARINDEX('<"blockquote',VAL) + 14,'')
    WHERE VAL LIKE '%<%>%'
END
SELECT * FROM @Tbl;