Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何找到&;替换超链接src属性SQL Server中的空间_Sql Server - Fatal编程技术网

Sql server 如何找到&;替换超链接src属性SQL Server中的空间

Sql server 如何找到&;替换超链接src属性SQL Server中的空间,sql-server,Sql Server,我有一个表,有一个字段存储大量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_i

我有一个表,有一个字段存储大量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中找到空间,并替换为没有空间。谢谢

这是我的数据

Centraline Climatizzatore


如果不仔细查看您的数据以了解其结构,就不可能给您一个正确的答案。 html是如何创建的?手工有一个所见即所得的设计师,能插入大量的标记? 问题是正确的方法很慢-您必须将每个html文档逐行加载到DOM解析器中,并使用DOM编辑链接。 更快的方法是使用正则表达式,但这取决于您对html布局有很好的理解&它具有适合正则表达式的相对干净的格式。 但是googlehtmlregex解析器&大多数建议是使用DOM方法。这是因为作为正则表达式编写自己的html解析器并不简单——html不是一个简单的标准。如果代码中有不常见的html特性,正则表达式将无法修复。 如果要替换的所有URL都从

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

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

注意,这是一个快速而肮脏的过程,需要进行更多测试

也许有一种更优雅的方法可以做到这一点,但是试试

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);

请给出整行数据或至少一个带有SRC attribute的标记如何在PATINDEX中提及空格?实际上url中有空格,比如?内容=阿尔夫·罗密欧。你的答案看起来很有希望,我会把它标记为答案。thanksi用你在src属性中找到空间的真实数据块更新我的问题,如“content.aspx?content=Alfa_Romeo_164”。我需要在所有content.aspx?之后远程空间。我检查了patindex,但它对空间无效。请将“%20”替换为空间“”,如下所示<代码>选择子字符串(@Url,0,PATINDEX('%[]%,@Url))+子字符串(@Url,PATINDEX('%[]%,@Url)+1,LEN(@Url)-PATINDEX('%[]%,@Url)+1)我用真实数据块更新我的问题,你在src属性中找到空间,如“content.aspx?content=Alfa_Romeo_164”。我需要在所有content.aspx?之后远程空间。我检查了patindex,但它在空间方面不起作用
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);