MySQL-更新列中字符串的一部分

MySQL-更新列中字符串的一部分,mysql,Mysql,我正在尝试替换某列中的某些文本—我已确认存在的文本。运行查询时: SELECT Body FROM dbname.tcontent where body like '%http://local.website.org%' and display=1 and approved=1; 它返回359条记录。因此,当我运行此查询时,我希望更改359条记录: update dbname.tcontent set Body = replace(Body, 'http://local.website.o

我正在尝试替换某列中的某些文本—我已确认存在的文本。运行查询时:

SELECT Body FROM dbname.tcontent 
where body like '%http://local.website.org%'
and display=1
and approved=1;
它返回359条记录。因此,当我运行此查询时,我希望更改359条记录:

update dbname.tcontent 
set Body = replace(Body, 'http://local.website.org', '/foldername') 
where instr(Body, 'http://local.website.org') > 0 
and display=1 
and approved=1;
但是,查询找到了359个匹配项,但没有更新任何列。消息内容为:“0行受影响的匹配行:359已更改:0警告:0。我非常确定我的SQL是正确的,因为我已经从至少三个来源确认了它。我已经了解到359“匹配”基于与WHERE子句匹配的记录,因此我相信第二行存在问题:

set Body = replace(Body, 'http://local.website.org', '/foldername') 
尽管SQL是正确的。我在首选项中取消选中“安全更新”只是为了确定,但仍然没有更新任何行

我仍然认为,也许我要替换的文本中的斜线和/或点是替换方法的绊脚石,尽管有一个例子说明了我想做什么


提前感谢您的帮助!

请尝试以下查询:

UPDATE `dbname`.`tcontent` 
SET `body`= REPLACE(`body`, 'FindThisText', 'ReplaceWithThisText') 
WHERE `body` like '%FindThisText%' AND `display`=1 and `approved`=1;

在运行此类更新查询之前,请始终备份表。

请尝试以下查询:

UPDATE `dbname`.`tcontent` 
SET `body`= REPLACE(`body`, 'FindThisText', 'ReplaceWithThisText') 
WHERE `body` like '%FindThisText%' AND `display`=1 and `approved`=1;
在运行此类更新查询之前,请始终备份表。

这不起作用吗

Set Body='ReplaceWithThisText'?

这不起作用吗


Set Body='ReplaceWithThisText'?

出于任何原因,我不得不将其分解为两条语句。第一条Update语句将http://替换为nothing,第二条语句将URL的其余部分替换为:

update database.tcontent set Body = replace(Body, 'http://', '')  where Body like '%http://local.website.org%';
update database.tcontent set Body = replace(Body, 'local.website.org', '/foldername')  where Body like '%local.website.org%';

无论出于何种原因,我不得不将其分解为两条语句。第一条Update语句将http://替换为nothing,第二条替换为URL的其余部分:

update database.tcontent set Body = replace(Body, 'http://', '')  where Body like '%http://local.website.org%';
update database.tcontent set Body = replace(Body, 'local.website.org', '/foldername')  where Body like '%local.website.org%';

感谢您的回复。我应该补充一下,我也尝试了那个UPDATE语句。相同的结果:“0行受影响的行匹配:359更改:0警告:0”如果您尝试更新一行怎么办?您可以这样做吗?我当然可以:更新表集SiteID='abc'其中tcontentid='def':“1行受影响的行匹配:1更改:1警告:0。”。好主意。再次感谢您的发布。但是,我无法使用REPLACE对一行执行更新,如下所示:UPDATE dbname.tcontent set Body=REPLACE(Body'FindThisText',replacetwiththistext'),其中instr(Body'FindThisText')>0,tcontent_ID=12345@安迪,这个问题对我很有用。你确定有一行符合你需要的所有标准吗?谢谢你的回答。我应该补充一点,我也尝试过更新语句。相同的结果:“0行受影响的行匹配:359已更改:0警告:0”如果尝试更新单个行会怎么样?您可以这样做吗?我当然可以:更新表集SiteID='abc',其中tcontentid='def':“1行受影响的行匹配:1更改:1警告:0。不过,考虑得好。再次感谢您的发布。但是,我无法使用REPLACE对一行执行更新,如下所示:UPDATE dbname.tcontent set Body=REPLACE(Body,'FindThisText',replacetwiththistext')where instr(Body,'FindThisText')>0和TCONTENT_ID=12345;@Andy该查询在中对我有效。您确定有一行满足您所需的所有条件吗?嗨,kendra。就是这个查询(带有where子句)行被更新。但是,当调用Body列上的REPLACE方法来替换我知道存在的部分文本时,没有行被更新:-(嗨,kendra,就是这个精确的查询(带有where子句)行被更新。但是,当调用Body列上的REPLACE方法来替换我知道存在的部分文本时,没有行被更新:-(