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

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是正确的。为了确保仍然没有任何行被更新,我在我的首选项中未选中“安全更新”。

我仍然认为,尽管有一个我想做的事here的例子,但我要替换的文本中的斜杠和/或圆点还是使replace方法陷入困境。

在此先感谢您的协助!

最佳答案

无论出于什么原因,我都必须将其分解为两个语句。第一条Update语句将http://替换为空,第二条替换了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%';

10-06 01:29