使用查询更新mysql数据库文本

时间:2019-02-12 18:04:47

标签: mysql sql database

我们目前拥有一个数据库,这些年来已存储了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 :(得分:1)

您可以使用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()
  • .*:任何内容(直到字符串结尾)

demo on 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'
);