【问题标题】:mysql to update a database using UPDATE SET and TRIM(LEADING wildcard prefix in recordmysql使用UPDATE SET和TRIM(记录中的LEADING通配符前缀)更新数据库
【发布时间】:2014-06-28 18:30:59
【问题描述】:

在我的数据库中,我有一个名为“内容”的表和一个名为“链接”的字段,该表中有近 300,000 条记录。

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

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

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

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

所以记录中只剩下:

http://www.destination.com

我什至可以一起工作

网址=http://www.destination.com 并简单地对“url =”部分执行替换命令作为第二个mysql命令。

如果有一个通配符命令,这项工作会容易得多,我只需通配符出现在以下链接记录中的所有内容: http://www.example.com/blah/blah/ 通配符 url= 但众所周知……没有这样的通配符可用

所以它让我查看了 UPDATE、SET 和 TRIM(LEADING 命令

更新content 设置link = TRIM(LEADING 'url=' FROM link)

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

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

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

我们将不胜感激有关如何在未来完成此更改的任何想法。

提前致谢;

【问题讨论】:

    标签: mysql set sql-update wildcard trim


    【解决方案1】:

    您可以使用 SUBSTRING_INDEX 函数:

    UPDATE content SET link=SUBSTRING_INDEX( `link` , 'url=', -1 )
    

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

    【讨论】:

      【解决方案2】:

      假设您要保留的部分始终以“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 返回从第二个参数中最后出现的针到结尾的子字符串。因为返回值中没有包含'http://',所以我们再次添加。

      备注:

      如果你也有 https:// 网址,你应该能够适应我的解决方案。

      【讨论】:

      • 它似乎工作并且钉住了 thoae 前缀部分。执行过程中的一个奇怪之处是它似乎没有区分记录是以 https:// 还是 http:// 开头所以如果我接受该声明并简单地将 https:// 替换为 http:// 它会然后继续将所有记录更改为以 https:// 开头 相反,如果我将语句切换回 http:// 它将继续更改所有记录以 http:// 但除了那一点异常之外谢谢你。我已经苦苦挣扎了几个小时,但您的代码技术却没有取得任何成功;)
      猜你喜欢
      • 2017-04-08
      • 1970-01-01
      • 2021-10-30
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多