mysql使用UPDATE SET和TRIM更新数据库(记录中的LEADING通配符前缀

时间:2014-06-28 18:31:00

标签: mysql set sql-update wildcard trim

在我的数据库中,我有一个名为'content'的表和一个名为'link'的字段,该表中有近300,000条记录。

在名为“link”的字段中,有许多记录如下所示:

http://www.example.com/blah/blah/123456789/url=http://www.destination.com

不幸的是,记录的前缀部分是唯一唯一的,其中编号部分是恒定的,从90到150个字母数字字符

我想删除前缀和/或包含url =

所以记录中唯一剩下的就是:

http://www.destination.com

我甚至可以使用

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条记录进行更改。

但我很想找到一个可以简单地传递给数据库的命令,以便将来更简单。

对于如何在未来实现这一变化的任何想法将不胜感激。

提前致谢;

2 个答案:

答案 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是否首先返回所需的字符串。