MySQL - UPDATE列中字符串的一部分

时间:2015-10-06 20:06:33

标签: mysql

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

df <- df %>%
  group_by(gender, size) %>%
  distinct(item) %>%
  filter(cumsum(type == "Fleece") <= 1) %>%
  sample_n(5)

它返回359条记录。因此,当我运行此查询时,我预计会更改359条记录:

SELECT Body FROM dbname.tcontent 
where body like '%http://local.website.org%'
and display=1
and approved=1;

但是,该查询找到了359个匹配项,但未更新任何列。消息显示:&#34; 0行受影响的行匹配:359更改:0警告:0。我非常确定我已经正确识别了SQL,因为我已经确认了至少有三个来源。我读过359&#34;匹配&#34;基于与WHERE子句匹配的记录,所以我认为问题在于第二行:

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;

即使SQL是正确的。我已取消选中&#34;安全更新&#34;在我的偏好中只是为了确定,并且仍然没有更新行。

我仍然认为,我正在替换的文本中的斜线和/或点可能会使取代方法绊倒,尽管我做了我想要做的事情here

提前感谢您的任何帮助!

3 个答案:

答案 0 :(得分:2)

无论出于何种原因,我不得不将其分解为两个陈述。第一个更新语句替换了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%';

答案 1 :(得分:1)

请尝试此查询:

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

在运行此类UPDATE查询之前,请始终备份您的表。

答案 2 :(得分:1)

这不起作用吗?

设置Body ='ReplaceWithThisText'?