【问题标题】:Sql bulk delete text content between two markerssql批量删除两个标记之间的文本内容
【发布时间】:2016-09-29 15:54:03
【问题描述】:

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

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

要删除的内容是这样的形式:

[:en] content to remove [:]

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

【问题讨论】:

    标签: mysql sql wordpress phpmyadmin


    【解决方案1】:

    您真正想要的是删除列内文本的更新语句,而不是删除语句(删除行)。你可以通过这个丑陋的解决方法到达那里:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多