以下是我的情况:
我公司为客户托管多个站点,站点内容存储在MySQL数据库中。
我有一个问题,我需要浏览整个数据库并替换内容的各个部分。例如:
我需要将 http://downloads.mysever.com/siteID/someImage.jpg 替换为 // downloads.mysever.com/siteID/someImage.jpg
所以我只需要从我们下载服务器的所有链接中删除 http:。
我的问题是最好的方法是什么?我是否需要编写一个php脚本来处理这个问题,或者我只能用MySQL来完成这个任务。
由于
答案 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;
答案 2 :(得分:0)
如果您能够暂时使数据库脱机,我发现最简单的方法是:
答案 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:%'