编辑列中的文本

时间:2010-08-26 19:46:05

标签: sql mysql phpmyadmin

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

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

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

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

非常感谢

4 个答案:

答案 0 :(得分:2)

您可以使用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);

答案 1 :(得分:1)

UPDATE tablename
SET product_item_short = REPLACE(product_item_short, 'data/image/someimage.png', 'newurl/something.png');

答案 2 :(得分:1)

如果你想要比丹尼尔在答案中描述的更灵活,你可以使用像

这样的东西
SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1)

会在第一次斜线后切掉所有东西。

答案 3 :(得分:0)

UPDATE example_table
SET product_item_short = SUBSTRING(product_item_short,6),
    product_item_long = SUBSTRING(product_item_long,6);