我有一张包含大量文字和网址的表格。
我需要拥有格式为http://anything.anything.anything
的任何字符串(URL)并将其替换为http://www.google.com
所以任何和所有的URL都被后者替换。
我在线试过,但找不到任何东西。 这应该是一个mysql命令,我可以在某些时间运行以替换任何和所有URL。
答案 0 :(得分:2)
你想做一个正则表达式替换,它不是MySQL本机函数,尽管之前有过各种各样的问题。
How to do a regular expression replace in MySQL?
如果您不仅限于使用MySQL,那么一个相对干净的方法就是编写一个bash脚本,该脚本会在表中提取包含URL的所有文本字段的列表以及足够的关键信息,在bash中执行RegEx(或者通过Perl或其他一些脚本语言,如果需要),然后更新回MySQL。
答案 1 :(得分:1)
你可以做些事情。意识到这远非最优 - 我可以听到那里的DBA尖叫着在连接条件下做rlike
的前景。
所有这些都在sqlfiddle中:http://sqlfiddle.com/#!2/a3ea9/1/0
考虑以下表格和数据:
create table data (
url varchar(255)
);
create table repls (
regex varchar(255),
repl varchar(255)
);
insert into data values
("http://example.com"),
("http://google.com"),
("http://stackoverflow.com"),
("http://space.stackexchange.com");
insert into repls values
('.*ex.*', 'http://www.yahoo.com'),
('.*google.*', 'http://www.bing.com'),
('.*stack.*', 'http://programmers.stackexchange.com');
你有一张网址表,还有一张正则表和替换表。
然后,用一个简单的'在select语句中查询...
select
D.url,
R.repl
from
data D
join repls R on (
D.url rlike R.regex
)
我们可以获取所有网址及其替换内容。然而,我在那里嵌入了一个陷阱。
使用此数据和查询,它返回5行:
url repl http://www.example.com http://www.yahoo.com http://google.com http://www.bing.com http://stackoverflow.com http://programmers.stackexchange.com http://space.stackexchange.com http://www.yahoo.com http://space.stackexchange.com http://programmers.stackexchange.com
首先要注意的是,这是一个替代品。在没有任何匹配之前,它不会进行替换。在这种情况下,这是一件好事,因为我们在http://programmers.stackexchange.com
规则上触发了.*stack.*
无限循环(它也会触发.*ex.*
规则,但是#39;不是无限循环,因为那里的替换不包含ex
)。
值得注意的是,匹配两行的内容将在那里两次。您需要额外的逻辑来处理规则的优先级。
最后,这是批发替代品。没有花哨的模式匹配组,因此某些网站上的附加路径信息会被移动到替换后的字符串文本中。
它可能会做所有这些事情,但它会涉及更多。
为了完成这项工作,最好将data
拉下来,并用能够处理变化的语言对其进行处理。
另一方面,如果您希望使用更新语句进行批量替换数据(而不是将其拉下来并重新发布相关的更新语句),或者数据移动到的系统是更多比上面的例子更麻烦且容易出错,这可能是一种调查方法。