Обновление базы данных mysql с использованием запроса - PullRequest
0 голосов
/ 12 февраля 2019

В настоящее время у нас есть база данных, в которой за эти годы хранится более 100 000 записей данных, но в структуре, которая больше не работает.

В таблице есть поле с именем youtube_video

Он хранит все видео YouTube для встраивания, например так:

http://www.youtube.com/embed/3mHuu5NklOs?rel=0
http://www.youtube.com/embed/3mHuu5NklOs

Нам нужно изменить его на:

https://www.youtube.com/watch?v=3mHuu5NklOs

Есть ли способ написать запрос, который делает это изменениес одним запросом?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете использовать REGEXP_REPLACE:

SELECT REGEXP_REPLACE(
    youtube_video,
    '^http://www.youtube.com/embed/([^?]+).*',
    'https://www.youtube.com/watch?v=\1'
) FROM mytable 

Распределение регулярных выражений:

  • ^: начало строки
  • http://www.youtube.com/embed/: постоянная строковая часть
  • ([^?]+): столько символов подряд, сколько возможно, кроме знака вопроса;окружающие скобки захватывают эту часть строки и делают ее доступной как \1 во втором аргументе для REGEXP_REPLACE()
  • .*: что угодно (до конца строки)

Эта демонстрация на DB Fiddle возвращает:

| youtube_video                                  | new_youtube_video                           |
| ---------------------------------------------- | ------------------------------------------- |
| http://www.youtube.com/embed/3mHuu5NklOs?rel=0 | https://www.youtube.com/watch?v=3mHuu5NklOs |
| http://www.youtube.com/embed/3mHuu5NklOs       | https://www.youtube.com/watch?v=3mHuu5NklOs |

При необходимости вы можете легко превратить это в UPDATE:

UPDATE mytable
SET youtube_video = REGEXP_REPLACE(
    youtube_video,
    '^http://www.youtube.com/embed/([^?]+).*',
    'https://www.youtube.com/watch?v=\1'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...