Sql批量删除两个标记之间的文本内容

时间:2016-09-29 15:54:03

标签: mysql sql wordpress phpmyadmin

是否可以批量删除两个已知标记之间的文本内容?

我需要这样做以避免手动编辑600个帖子。

要删除的内容采用以下形式:

[:en] content to remove [:]

除了要删除的内容之外,我还需要删除wordpress表wp_post和wp_content中的标记[:en]和[:]。

1 个答案:

答案 0 :(得分:0)

你真正想要的是一个更新语句来删除列中的文本而不是删除语句(删除行)。你可以通过这种丑陋的解决方法实现目标:

UPDATE yourTable
SET yourColumn = CONCAT(
  SUBSTR(yourColumn, 1, INSTR(yourColumn, '[:en]') - 1),
  SUBSTR(yourColumn, INSTR(SUBSTR(yourColumn, INSTR(yourColumn, '[:en]')), '[:]')
                   + INSTR(yourColumn, '[:en]') + 3)
)
WHERE yourColumn LIKE '%[:en]%[:]%'

它背后的原因:找到[:en]的索引和[:en]之后的第一个[:](仅通过[:en]之后的子串,但是后面切掉的长度有要添加+3作为[:]的长度,然后在前后连续获取子串。

重写为select语句以证明其有效:SQLFiddle