【问题标题】:No way to replace string of unknown length with SQL query?没有办法用 SQL 查询替换未知长度的字符串?
【发布时间】:2016-07-29 06:48:00
【问题描述】:

这可能吗?

我要做的就是在 Wordpress 数据库列中搜索一个通用字符串,然后删除该字符串以及该字符串左侧的所有内容

我正在尝试以下变体:

UPDATE wp_posts
SET post_content = REPLACE(post_content, '%(1280 x 853)</p>', '')

我已经意识到您不能将 REPLACE 与通配符一起使用。那么还有其他方法可以做到吗?

注意:公共字符串左侧的内容长度不同,因此我无法使用任何需要指定一定数量字符的代码。

是的,我实际上想更新数据库列中的每个适用行,而不是简单地返回一个 SELECT 语句。

任何帮助将不胜感激。我的大脑因这个问题老了 10 年。

【问题讨论】:

  • 您可以发布一些具有预期结果的示例数据吗?

标签: mysql sql wordpress


【解决方案1】:

鉴于此

MariaDB [sandbox]> SELECT * FROM T;
+---------------------------+
| STR                       |
+---------------------------+
| AB(1280 x 853)</p>CD      |
| 1234(1280 x 853)</p>56789 |
| ZYX                       |
+---------------------------+

这个

UPDATE T
SET    STR =  SUBSTRING(STR,INSTR(STR,'(1280 x 853)</p>') + LENGTH('(1280 x 853)</p>'),LENGTH(STR))
WHERE    INSTR(STR,'(1280 x 853)</p>') > 0
;

结果

SELECT * FROM T;
+-------+
| STR   |
+-------+
| CD    |
| 56789 |
| ZYX   |
+-------+

【讨论】:

  • 哇,你真是个天才!这就像一个魅力。你只是为我节省了几个小时不必要的工作。谢谢谢谢谢谢!
【解决方案2】:

希望我能清楚地理解你的问题,你可以试试这个:

UPDATE wp_posts
SET post_content = SUBSTRING_INDEX(post_content, '(1280 x 853)</p>', -1);

【讨论】:

    【解决方案3】:

    试试这个,

    UPDATE wp_posts SET post_content = SUBSTR(post_content, 1, (LENGTH(post_content) - 16));
    

    如果有任何进一步改进的查询,我会在评论中发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2020-07-29
      • 1970-01-01
      • 2014-07-03
      • 2020-06-09
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多