在我的数据库中,我有一个名为'content'的表和一个名为'link'的字段,该表中有近300,000条记录。
在名为“link”的字段中,有许多记录如下所示:
http://www.example.com/blah/blah/123456789/url=http://www.destination.com
不幸的是,记录的前缀部分是唯一唯一的,其中编号部分是恒定的,从90到150个字母数字字符
我想删除前缀和/或包含url =
所以记录中唯一剩下的就是:
我甚至可以使用
URL = http://www.destination.com 并简单地对“url =”部分执行替换命令作为第二个mysql命令。
如果有一个通配符命令,这个工作会容易得多,我只是通配符显示在链接记录中的所有内容: http://www.example.com/blah/blah/通配符网址= 但众所周知......没有这样的通配符
所以它让我看了UPDATE,SET和TRIM(LEADING命令
更新content
SET link
=
TRIM(LEADING'url ='FROM link
)
但是这不能产生我想要的改变
所以我采用劳动密集型方法下载数据库,并使用搜索和替换程序对包含这些参数的44,000条记录进行更改。
但我很想找到一个可以简单地传递给数据库的命令,以便将来更简单。
对于如何在未来实现这一变化的任何想法将不胜感激。
提前致谢;
答案 0 :(得分:0)
假设您要保留的部分始终以' http://'您可以在SUBSTRING_INDEX函数的帮助下获得所需的结果字符串:
SELECT CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1)) FROM content;
并使用简单声明
修复您的表格UPDATE
content
SET
link = CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1));
<强>解释强>
带有第三个参数的SUBSTRING_INDEX返回从第二个参数中针的最后一次出现到结尾的子串。因为&#39; http://&#39;不包含在返回值中,我们再次添加它。
注:
如果您也有https://网址,那么您应该能够调整我的解决方案。
答案 1 :(得分:0)
您可以使用SUBSTRING_INDEX函数:
UPDATE content SET link=SUBSTRING_INDEX( `link` , 'url=', -1 )
我还没有测试过,所以我建议你检查substring_index是否首先返回所需的字符串。