多个查找和替换使用SQL查询



我想使用SQL查询来查找和替换多个值。我看了一下这个问题,答案如下:

UPDATE 
YourTable
SET 
Column1 = REPLACE(Column1,'a','b')
WHERE 
Column1 LIKE '%a%'

我如何找到并替换多个值,而不仅仅是一个?

我的数据如下,有数百行,我特别想针对每个product_id:123:

subscription_id,产品"128","product_id: 268 |数量:1 |总:3.15元:| |税:0;product_id: 267 |数量:1 |总:2.97元:| |税:0">

我需要用新产品id替换产品id。所有与268匹配的都变成了195所有与267匹配的都将变成194。

除了上面的代码块并对每个产品使用它之外,还有其他有效的方法吗?我能扫一遍吗?

最简单的可能方法是将REPLACE链在一起,但考虑到字段的连接性质,您需要确保不会无意中瞄准实际上不是product_id值的东西。您可以通过从字符串值本身包含一些上下文内容来缓解这种情况:

UPDATE YourTable
SET products = REPLACE(REPLACE(products, "product_id:267|", "product_id:194|"), "product_id:268|", "product_id:195|");

DBFiddle | MySQL 5.6 Reference Manual:: 13.2.8REPLACEStatement


如果在给定字段中这些字符串可能出现的方式有一些可变性,并且您正在运行MySQL>=8.0,您可以利用REGEXP_REPLACE()之类的东西来使用定义的RegExp模式执行相同的替换。

是的,有很多方法。例如,您可以创建一个像

这样的表替换(id, oldval, newval)

并执行以下操作:

UPDATE
Yourtable
JOIN
replacements
ON
Yourtable.Column1 LIKE CONCAT('%', replacements.oldval, '%')
SET
Yourtable.Column1 = REPLACE(Yourtable.Column1, replacements.oldval, replacements.newval);

问题是您需要用oldval-newval对填充替换,但是MySQL无法猜到。插入与

一样简单(假设id为auto_increment)。
INSERT INTO replacements(oldval, newval) VALUES
('a', 'b'),
('c', 'd'),
...
;

最新更新