SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.11.2018 11:32:15

ushi
Участник
Зарегистрирован: 07.11.2018
Сообщений: 2

Как задать REPLACE с %

Всем привет!

Есть запрос вида:

UPDATE таблица SET столбец = REPLACE (столбец,'1что-то2', '');

Так вот 'что-то' постоянно меняется. Остаются неизменными только '1' и '2' по краям.
Подскажите пожалуйста, как задать запрос вида:

UPDATE таблица SET столбец = REPLACE (столбец,'1%2', '');

Неактивен

 

#2 07.11.2018 15:18:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как задать REPLACE с %

можно комбинацией locate и substring

похожий пример пример есть в
http://sqlinfo.ru/forum/viewtopic.php?id=8076

Неактивен

 

#3 07.11.2018 16:27:50

ushi
Участник
Зарегистрирован: 07.11.2018
Сообщений: 2

Re: Как задать REPLACE с %

Исходный код такой:

</a>что-то<a>

Запрос подсмотрел в примере и переделал:

UPDATE `wp_posts`
SET `post_title` =
  CONCAT(
        SUBSTRING(`post_title`
                  FROM 1
                  FOR LOCATE('</a>',
                             LOWER(`post_title`)
                            ) - 1
                 ),
        SUBSTRING(`post_title`
                  FROM LOCATE('<a>',
                              LOWER(`post_title`),
                              LOCATE('</a>',
                                     LOWER(`post_title`)
                                    ) - 2
                             ) + 2
             )
        )
WHERE LOCATE('</a>',
             LOWER(`post_title`)
            )
;


Запрос все выполняет и чистит, но оставляет после себя один символ ">". Подскажите, как избавиться?

Неактивен

 

#4 07.11.2018 18:56:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как задать REPLACE с %

наглядней проверять через select

MariaDB [test]> SELECT b FROM test;
+---------------------+
| b                   |
+---------------------+
| test<a>temp</a> old |
| test</a>temp<a> old |
+---------------------+
2 rows in set (0.00 sec)



MariaDB [test]> SELECT b, locate('</a>',b), locate('<a>',b,locate('</a>',b)),
    -> substring(b,1,locate('</a>',b)-1),
    -> substring(b,locate('<a>',b,locate('</a>',b))+3)
    -> FROM test where locate('</a>',b) < locate('<a>',b,locate('</a>',b))\G
*************************** 1. row ***************************
                                              b: test</a>temp<a> old
                               locate('</a>',b): 5
               locate('<a>',b,locate('</a>',b)): 13
              substring(b,1,locate('</a>',b)-1): test
substring(b,locate('<a>',b,locate('</a>',b))+3):  old
1 row in set (0.00 sec)
 

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson