Просто интересно, может ли кто-нибудь помочь мне со следующей проблемой.
У меня есть база данных в MySQL, и я использую PHPMyAdmin для взаимодействия с базой данных.
Итак, в таблице example_table_name у меня есть два столбца product_item_short
и product_item_long
, в которых есть URL-адрес. Теперь имеется 3000 строк данных, и в качестве примера URL-адрес каждого начинается с data/image/someimage.png
.
В обоих столбцах мне нужно удалить data/
, и я хотел бы знать, как я мог это сделать в SQL.
Большое спасибо
UPDATE example_table
SET product_item_short = SUBSTRING(product_item_short,6),
product_item_long = SUBSTRING(product_item_long,6);
Вы можете использовать функцию 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)
UPDATE:
Если вы решили исключить первый каталог пути, будь то data/
или anything-else/
, вы можете использовать LOCATE()
, поскольку @Frank предложил в другом ответе:
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);
UPDATE tablename
SET product_item_short = REPLACE(product_item_short, 'data/image/someimage.png', 'newurl/something.png');
Если вы хотите быть более гибким, чем то, что Даниэль описал в своем ответе, вы можете использовать что-то вроде
SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1)
который отрезал бы все после первой косой черты.
LOCATE('/', product_item_short)
. Вам также не хватает закрывающей скобки :)