【问题标题】:Edit text in columns编辑列中的文本
【发布时间】:2010-08-26 19:46:05
【问题描述】:

只是想知道是否有人可以帮助我解决以下问题。

我在 MySQL 中有一个数据库,我正在使用 PHPMyAdmin 与数据库交互。

因此,在表 example_table_name 中,我有两列 product_item_shortproduct_item_long,其中包含 URL。现在有 3000 行数据,例如,每行中的 URL 都以 data/image/someimage.png 开头。

在这两列中,我需要删除 data/,我想知道如何在 SQL 中做到这一点。

非常感谢

【问题讨论】:

    标签: sql mysql phpmyadmin


    【解决方案1】:

    你可以使用SUBSTR()函数:

    UPDATE your_table 
    SET    product_item_short = SUBSTR(product_item_short, 6),
           product_item_long = SUBSTR(product_item_long, 6);
    

    测试用例:

    CREATE TABLE your_table (
        id int, 
        product_item_short varchar(50), 
        product_item_long varchar(50)
    );
    
    
    INSERT INTO your_table VALUES (1, 'data/image/someimage.png',         'data/image/someimage.png');
    INSERT INTO your_table VALUES (2, 'data/other-folder/someimage.png',  'data/other-folder/someimage.png');
    INSERT INTO your_table VALUES (3, 'data/no-folder.png',               'data/no-folder.png');
    INSERT INTO your_table VALUES (4, 'data/image/path/three-levels.png', 'data/image/path/three-levels.png');
    

    UPDATE 之后的结果:

    SELECT * FROM your_table;
    +------+-----------------------------+-----------------------------+
    | id   | product_item_short          | product_item_long           |
    +------+-----------------------------+-----------------------------+
    |    1 | image/someimage.png         | image/someimage.png         |
    |    2 | other-folder/someimage.png  | other-folder/someimage.png  |
    |    3 | no-folder.png               | no-folder.png               |
    |    4 | image/path/three-levels.png | image/path/three-levels.png |
    +------+-----------------------------+-----------------------------+
    4 rows in set (0.00 sec)
    

    更新:

    如果你的解决方案消除了路径的第一个目录,无论是data/还是anything-else/,你可能要使用LOCATE()函数,如@Frank's suggested在另一个答案中:

    UPDATE your_table 
    SET    product_item_short = SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1),
           product_item_long = SUBSTR(product_item_long, LOCATE('/', product_item_long) + 1);
    

    【讨论】:

    • 嗨,谢谢。那么,如果这是图像 URL:data/image/someimage.jpg 如果我使用上面的 SQL,它只会删除 data/ 元素?
    • @Bill:它实际上会去除前 5 个字符。我已经用一个测试用例更新了我的答案。看看这是否是你要找的:)
    • 太棒了,非常感谢您的帮助 :)
    • @Bill:我很高兴这对您有用...如果您发现答案有助于解决您的问题,您可能希望通过单击绿色勾号将答案标记为已接受 :)
    【解决方案2】:
    UPDATE tablename
    SET product_item_short = REPLACE(product_item_short, 'data/image/someimage.png', 'newurl/something.png');
    

    【讨论】:

      【解决方案3】:

      如果你想比丹尼尔在他的回答中描述的更灵活,你可以使用类似

      SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1)
      

      这会在第一个斜线之后切断所有内容。

      【讨论】:

      • 好主意。但是请注意,您的论点是相反的。应该是LOCATE('/', product_item_short)。您还缺少右括号:)
      • 我在回答中提到了您的解决方案...+1 :)
      【解决方案4】:
      UPDATE example_table
      SET product_item_short = SUBSTRING(product_item_short,6),
          product_item_long = SUBSTRING(product_item_long,6);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        相关资源
        最近更新 更多