我们目前拥有一个数据库,这些年来已存储了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
有没有一种方法可以编写一个查询来通过单个查询进行更改?
答案 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'
);