MySQL RegExp替换

时间:2012-12-19 16:26:41

标签: php mysql regex

以下是我的情况:

我公司为客户托管多个站点,站点内容存储在MySQL数据库中。

我有一个问题,我需要浏览整个数据库并替换内容的各个部分。例如:

我需要将 http://downloads.mysever.com/siteID/someImage.jpg 替换为 // downloads.mysever.com/siteID/someImage.jpg

所以我只需要从我们下载服务器的所有链接中删除 http:

我的问题是最好的方法是什么?我是否需要编写一个php脚本来处理这个问题,或者我只能用MySQL来完成这个任务。

由于

5 个答案:

答案 0 :(得分:2)

您可以使用sql语句

 UPDATE tablename SET url = REPLACE(url, 'http:', '');

阅读this博客文章

您可以使用命令行

执行此命令
mysql -uUSERNAME -p DATABASE_NAME -e "UPDATE tablename SET url = REPLACE(url, 'http:', '')";

答案 1 :(得分:2)

你可以用纯mysql做到这一点:

update table set field = REPLACE(field, 'http:', '') where INSTR(field, 'http:') > 0;

请参阅this question

答案 2 :(得分:0)

如果您能够暂时使数据库脱机,我发现最简单的方法是:

  1. 使用mysqldump导出整个数据库
  2. 在您希望更新数据库转储的任何编辑器中运行查找和替换
  3. 从转储文件重新创建数据库 - 确保一切正常,然后用新版本替换原始数据库。

答案 3 :(得分:0)

MySQL确实提供正则表达式功能。功能可能太详细了,不能进入这里,所以这里是链接:

http://dev.mysql.com/doc/refman/5.5/en/regexp.html

您的示例案例的基本用法示例如下:

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field REGEXP '^http:'

但请注意,只需执行此操作即可完成此案例而无需正则表达式:

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field LIKE 'http:%'

因此,您可能不需要为要执行的每种替换类型使用正则表达式。

答案 4 :(得分:0)

要删除表中所有行的前导'http:'字符串(来自字符类型列),那么这样简单的东西就可以工作:

UPDATE mytable
   SET mycol = SUBSTRING(mycol,6)
 WHERE mycol LIKE 'http:%'

更新:

请注意,使用REPLACE函数将从字符串中替换所有出现的指定字符串;它可能不适合仅删除指定字符串的前导出现。

如果您要删除所有出现的' http:'在列值中找到,然后:

UPDATE mytable
   SET mycol = REPLACE( mycol , 'http:, '')
 WHERE mycol LIKE '%http:%'

MySQL确实支持正则表达式,特别是用于查找与给定正则表达式匹配的值;但MySQL不支持"替换"使用正则表达式。

所以你可以在查询中使用它:

 WHERE mycol REGEXP 'http:'

取代(相当于):

 WHERE mycol LIKE '%http:%'