我正在使用MySQL,我需要用<p>
替换</p><p>
的每个第n次出现。
我有以下内容用<p>
替换所有<p></p>
代码。但是我需要对其进行更新,以便仅在<p>
的第二次或更多次更新时进行更新。
UPDATE dnname.products
SET description = REPLACE (description, '<p>', '<p></p>')
例如,描述中的当前值可能如下所示:
<p>test<p>test2
我需要它看起来像这样
<p>test</p><p>test2
巧合的是,我需要在每个值的开头插入<p>
,并在每个值的末尾插入</p>
。但这是针对不同的查询。
答案 0 :(得分:1)
您可以替换所有匹配项,然后删除第一个匹配项。老实说,使用多个更新可能更容易。但是,像这样:
UPDATE dnname.products
SET description = REPLACE(description, '<p>', '<p></p>');
UPDATE dnname.products
SET description = INSERT(description, LOCATE('<p></p>', description), 7,
'<p>', '<p></p>')
WHERE description like '%<p></p>%';
您可以将这些组合成一个更新:
UPDATE dnname.products
SET description = INSERT(REPLACE(description, '<p>', '<p></p>'),
LOCATE('<p></p>', REPLACE(description, '<p>', '<p></p>')), 7,
'<p>', '<p></p>')
WHERE description LIKE '%<p>%';
答案 1 :(得分:0)
我不相信有一个原生的mysql函数可以执行此操作,但您可以导出字段或表并尝试使用sed替换然后将其重新导入。
有更多优雅的解决方案,但您可以执行类似
的操作mysqldump tablename > table.sql
完成后,您可以将<p>
替换为<p></p>
sed 's/<p>/<p></p>/g' table.sql > almost-fixed.sql
然后你想再次修复第一位(有点在那里并且再次解决方案
sed 's/^<p></p>/<p>/g' almost-fixed.sql > fixed.sql
然后在
中重新运行mysql yourdatabase < fixed.sql