使用以前的值更新 MySQL 中的列 [重复]

Posted

技术标签:

【中文标题】使用以前的值更新 MySQL 中的列 [重复]【英文标题】:Updating a column in MySQL using its previous value [duplicate] 【发布时间】:2018-02-20 13:43:02 【问题描述】:

我在 mysql 'url_map' 中有一个包含 2 列的表:id、url,其中填充了一些值。像这样的:

+----+-----------------------------------------+ | id | url | +----+-----------------------------------------+ | 1 | http://myserver.mywebsite.com/file1.txt | | 2 | http://myserver.mywebsite.com/file2.txt | +----+-----------------------------------------+

我的要求是使用以前的值将表中每一行的“url”更新为新值。

+----+---------------------------------------------+ | id | url | +----+---------------------------------------------+ | 1 | https://mynewserver.mywebsite.com/file1.txt | | 2 | https://mynewserver.mywebsite.com/file2.txt | +----+---------------------------------------------+

如果你看到变化,在每一行中,'url'的值已经从

http:// 到 https:// myserver 到 mynewserver

url 中的其他内容保持原样。

谁能帮我写这个查询?

【问题讨论】:

替换函数可以作为起点 【参考方案1】:

我还没有对此进行测试,但理论上应该可以:

UPDATE `url_map` SET url = REPLACE(url, "http://myserver", "https://mynewserver")

【讨论】:

你的语法错误。 我的错,无论出于何种原因,我仍然牢记“SELECT”语法。更新了。【参考方案2】:

嗯,正如你的例子所说,你可以使用替换方法

Update url_map
Set    url = replace(url, 'http://myserver', 'https://mynewserver');

【讨论】:

【参考方案3】:

我会简单地做一个UPDATE 声明,例如:

UPDATE url_map
   SET url = REPLACE(REPLACE(url, 'http', 'https'),'myserver ','mynewserver')

或者如果你想在一个 REPLACE 中完成它(因为 http 和 myserver 基本上是一个字符串)

UPDATE url_map
   SET url = REPLACE(url, 'http://myserver', 'https://mynewserver')

【讨论】:

【参考方案4】:

你可以直接在更新语句中使用之前的值

UPDATE your_table t SET t.url = REPLACE(REPLACE(t.url, 'http://', 'https://'), 'myserver', 'mynewserver')

【讨论】:

【参考方案5】:

您必须创建一个过程。在程序中循环遍历行并进行更改。有关详细说明,请参阅https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

【讨论】:

在这种情况下你不需要程序,做一个简单的更新会容易得多。在其他情况下,该程序可能是一个很好的解决方案:)

以上是关于使用以前的值更新 MySQL 中的列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 使用另一个表中的列排序行并且不重复数据

使用内部联接更新多个表中的列

UseState 总是显示以前的值[重复]

Oracle SQL - 重复行并更新表中的列

使用集合中的值更新表中的列

如何使用表 B 中的信息更新表 A 中的列 [重复]