1

我有一个表,并且有一个字段可以存储大量的 html 数据。每个 html 数据都有许多 url 和许多其他文本。错误地将 html 数据插入表中时,超链接 src 属性中存储了一些空间,如下所示

http://www.mysite.com/content.aspx?%20content=Alfa_Romeo_164_1991_LCD_Climate_Control_it
http://www.mysite.com/content.aspx?%20content=Audi_A6_2001_Brake_Calliper_it
http://www.mysite.com/content.aspx?%20content=audi_a4_amp_a6_1996_2001_and_vw_passat_1996_2001_abs_pumps_commonly_failing_it
http://www.mysite.com/content.aspx?%20content=Audi_A2_Body_control_failure_it
http://www.mysite.com/content.aspx?%20content=Audi_A4_1997_Heater_Control_Unit_it

只看到%20表示空间。

actually url should stored in like this way without space
 http://www.mysite.com/content.aspx?content=Alfa_Romeo_164_1991_LCD_Climate_Control_it

我想从每个 url 中查找空间并替换为没有空间。谢谢

更新这里是我的数据

<p align="left" class="MsoNormal" style="LINE-HEIGHT: normal"><span lang="IT" style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt">Centraline Climatizzatore<br></span><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt"><a href="http://www.bba-reman.com/content.aspx?content=Alfa_147_JTD_2005_Climate_Control_it"><font size="2" face="Arial">Alfa Romeo 147 JTD 2005 - Unità centralina climatizzatore (Numero di pezzo 7353377750) </font></a></span><span lang="IT" style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt"><br></span><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt"><a href="http://www.bba-reman.com/content.aspx? content=Alfa_Romeo_164_1991_LCD_Climate_Control_it"><span lang="IT" style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt">Alfa Romeo 164 Early 90s - Guasto centralina Climatizzatore LCD.</span></a></span><span lang="IT" style="FONT-FAMILY: 'Times  New Roman','serif'; FONT-SIZE: 12pt"><br></span><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt"><a href="http://www.bba-reman.com/content.aspx?content=Alfa-Romeo-156-16v-ABS-0273004535-italia"><span lang="IT" style="FONT-FAMILY: 'Arial','sans- serif'; FONT-SIZE: 10pt">Alfa Romeo 156 L'unità centralina climatizzatore non rimane alla temperatura stabilita</span></a></span></p>
4

2 回答 2

1

请注意,这是一个快速而肮脏的,需要更多测试

可能有一种更优雅的方式来做到这一点,但尝试......

SELECT SUBSTRING(@Url, 0, PATINDEX('%[%20]%', @Url)) + SUBSTRING(@Url, PATINDEX('%[%20]%', @Url) + 3, LEN(@Url) - PATINDEX('%[%20]%', @Url) + 2);

可以使用以下方法进行测试:

DECLARE @Url nvarchar(100) = 'http://www.mysite.com/content.aspx?%20content=Alfa_Romeo_164_1991_LCD_Climate_Control_it';

SELECT @Url;

SELECT PATINDEX('%20%', @Url);

SELECT SUBSTRING(@Url, 0, PATINDEX('%[%20]%', @Url)) + SUBSTRING(@Url, PATINDEX('%[%20]%', @Url) + 3, LEN(@Url) - PATINDEX('%[%20]%', @Url) + 2);

编辑

这是一个稍微不那么脏的方法。只需将您的模式粘贴在方括号之间即可。

DECLARE @Url nvarchar(100) = 'mysite.com/content.aspx? content=Alf-romeo';
DECLARE @Pattern nvarchar(100) = '[ ]';
DECLARE @Len int = 0;

SELECT @Url;
SELECT LEN(@Pattern);

IF LEFT(@Pattern, 1) = '[' AND RIGHT(@Pattern, 1) = ']' BEGIN
    SELECT @Len = (LEN(@Pattern) - 2);
END
ELSE
BEGIN
    SELECT @Len = LEN(@Pattern);
END

SELECT SUBSTRING(@Url, 0, PATINDEX('%' + @Pattern + '%', @Url)) + SUBSTRING(@Url, PATINDEX('%' + @Pattern + '%', @Url) + @Len, LEN(@Url) - PATINDEX('%' + @Pattern + '%', @Url) + @Len);
于 2013-09-27T11:26:04.157 回答
1

如果不仔细查看您的数据以了解其结构,就不可能为您提供此问题的正确答案。html是如何创建的?用手?有一个 WYSIWYG 设计器,它会投入大量的标记?问题是正确的这样做的方法很慢 - 您必须将每个 html 文档 - 逐行 - 加载到 DOM 解析器中并使用 DOM 来编辑链接。更快的方法是使用正则表达式,但这取决于您对 html 布局有很好的理解,并且它具有适合正则表达式的相对干净的格式。但是谷歌 html 正则表达式解析器和大多数建议是使用 DOM 方法。那是因为将自己的 html 解析器编写为正则表达式并不简单 - html 不是一个简单的标准。如果您的代码中有不常见的 html 功能,则正则表达式会将其弄乱,无法修复。如果要替换的所有 URL 都以http://www.mysite.com/content.aspx?%20content开头,则可以使用

UPDATE docs
SET html=REPLACE(html,'http://www.mysite.com/content.aspx?%20content=','http://www.mysite.com/content.aspx?content=')

(假设您的表名为 [docs] 并且要更改的字段是 [html])

于 2013-09-27T11:25:28.297 回答