mysql使用更新集和修剪(记录中的前导通配符前缀)更新数据库

mysql使用更新集和修剪(记录中的前导通配符前缀)更新数据库,mysql,set,sql-update,wildcard,trim,Mysql,Set,Sql Update,Wildcard,Trim,在我的数据库中有一个名为“content”的表和一个名为“link”的字段,该表中有近300000条记录 在名为“链接”的字段中,有许多记录如下所示: 不幸的是,记录的前缀部分是单独唯一的,其中编号部分是常量,从90个字母数字字符更改为150个字母数字字符 我想删除url= 因此,记录中只剩下: 或 我甚至可以和你一起工作 网址= 只需对url=part执行一个replace命令作为第二个mysql命令 如果有一个通配符命令,这项工作会容易得多,我只需通配符链接记录中显示的所有内容: 通配符ur

在我的数据库中有一个名为“content”的表和一个名为“link”的字段,该表中有近300000条记录

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

不幸的是,记录的前缀部分是单独唯一的,其中编号部分是常量,从90个字母数字字符更改为150个字母数字字符

我想删除url=

因此,记录中只剩下:

我甚至可以和你一起工作

网址= 只需对url=part执行一个replace命令作为第二个mysql命令

如果有一个通配符命令,这项工作会容易得多,我只需通配符链接记录中显示的所有内容: 通配符url= 但众所周知,目前还没有这样的通配符

因此,它让我看到了更新、设置和修剪命令

更新内容 设置链接= TRIMLEADING“url=”来自链接

但这并没有产生我想要的改变

因此,我采用了一种劳动密集型的方法,下载数据库,并使用搜索和替换程序对包含这些参数的44000条记录进行更改

但是我很想找到一个命令,我可以简单地传递到数据库,使它在将来变得更简单

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


提前感谢;

假设您要保留的部分始终以“http://”开头,您可以在函数的帮助下获得所需的结果字符串:

SELECT CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1)) FROM content;
UPDATE content SET link=SUBSTRING_INDEX( `link` , 'url=', -1 )
并用简单的语句修复您的表

UPDATE 
    content
SET
    link = CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1));
说明:

第三个参数为负数的SUBSTRING\u INDEX返回从第二个参数中指针最后一次出现到结尾的子字符串。由于返回值中不包含“http://”,因此我们再次添加它

备注:


如果您也有https://url,您应该能够调整我的解决方案。

您可以使用SUBSTRING\u INDEX函数:

SELECT CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1)) FROM content;
UPDATE content SET link=SUBSTRING_INDEX( `link` , 'url=', -1 )

我还没有测试过它,所以我建议您先检查substring_index是否返回所需的字符串。

它似乎有效,并锁定了thoae前缀部分。执行过程中的一个奇怪之处是,它似乎无法区分记录是以https://还是http://开头,因此如果我接受该语句并简单地替换https://where它有http://然后将继续将所有记录更改为https://开头,反之,如果我将语句切换回http://它将继续将所有记录更改为http://开头,但除此之外,我要感谢你。我一直在绞尽脑汁数小时,几乎没有成功乌尔码工艺;