【发布时间】:2016-09-29 15:54:03
【问题描述】:
是否可以批量删除两个已知标记之间的文本内容?
我需要这样做以避免手动编辑 600 个帖子。
要删除的内容是这样的形式:
[:en] content to remove [:]
除了要删除的内容之外,我还需要删除 wordpress 表 wp_post 和 wp_content 中的标记 [:en] 和 [:]。
【问题讨论】:
标签: mysql sql wordpress phpmyadmin
是否可以批量删除两个已知标记之间的文本内容?
我需要这样做以避免手动编辑 600 个帖子。
要删除的内容是这样的形式:
[:en] content to remove [:]
除了要删除的内容之外,我还需要删除 wordpress 表 wp_post 和 wp_content 中的标记 [:en] 和 [:]。
【问题讨论】:
标签: mysql sql wordpress phpmyadmin
您真正想要的是删除列内文本的更新语句,而不是删除语句(删除行)。你可以通过这个丑陋的解决方法到达那里:
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,然后取前后的子串并concat。
重写为 select 语句以证明它有效:SQLFiddle
【讨论】: