sql的update语句如何实现对某字段的部分值批量更新?

嘿,你提到的REPLACE函数在UPDATE中使用时确实是一个顽皮的操作。
但我必须要跟你唠叨一下,这里有点令人兴奋。

上周有客户问我关于SQL批量更新的问题,当时他想使用REPLACE。
我看了一下它的表结构,叫做members。
有一个地址字段,其中存储用户地址。
他想把所有带有“街”字的地址都替换成“街”,例如“XX街XX号”改为“XX街XX号”。

他写的SQL是这样的: sql 更新成员 设置地址 = REPLACE(地址, '街道', '街道') WHERE 地址 LIKE '%路%';
看起来很合理,对吧?当我测试的时候,我发现这是一个陷阱。
他的桌子上有一张纸条:“北京市海淀区中关村大街1 号。
”这条“中关村大街”里没有“街”字,按道理来说是不应该碰的。
但通过REPLACE功能,“中关村大街”实际上变成了“中关村大街”。
你觉得好笑还是不好笑?
这件事让我想起了我在上海做项目时陷入的陷阱。
当时有一个名为“产品”的表。
产品描述存储在描述字段中。
还有一个名为“Keywords”的字段,用于存储产品关键字,例如“waterproof|wearable|durable”。
客户希望在所有描述中批量添加“防水”,并更新关键词中的“防水”。

他写了一条SQL: sql 更新产品 SET keywords = REPLACE(关键字, '防水', '') WHERE 描述 LIKE '%waterproof%';
结果是什么?对于描述中含有“防水”的任何人:不仅描述发生了变化,而且关键字中的“防水”也被删除了。
由于 REPLACE 函数循环遍历每个字符来查找精确匹配的子字符串,因此上下文无关。
关键词“防水”可以与“防水袋”等其他词组合,但仍被删除。

所以你可以看到你在UPDATE中提到的REPLACE函数需要特别小心地使用。
虽然可以实现批量替换,但这种替换是盲目的。
它只检查原始字符串中是否存在完全匹配的部分值,而不管该值是否是您要替换的值。

我一般建议您在这种情况下执行以下两个步骤:首先使用 SELECT+REPLACE 预览效果,确认没有问题,然后运行 ​​UPDATE。
要么写更复杂的条件,要么使用正则表达式(如果数据库支持的话)来更精确地控制替换范围。

你提到的数据备份这一点特别重要。
在进行任何更改之前必须创建备份,否则出现问题就没有理由哭泣。

使用时一定要仔细考虑。
REPLACE很实用,但也很容易导致问题。
视情况而定,不要盲目使用。

sql在update更新时如何快速且大批量的更新数据

MERGEINTO 状态目标表 ASAWHEREA USING 状态源表 ASBONB WHEN SETTHENUPDATESET。
字段 = B. 字段 WHEN NOT SETCANTHENINSERT 字段;

SQL批量更新数据

上周 有朋友问到SQL中批量更新的问题。

主要有四种方法。

替换为 1 尝试插入它。
如果有key冲突,先删除再插入。
相当于更换整条线路。
但是,数据将被删除。
自动递增 ID 可能会受到影响。
请谨慎使用。

2 .更新重复键时插入...。
验证插入时的密钥。
密钥冲突会触发更新。
无需删除它。
更常用。

3 首先创建一个临时表。
将数据放入临时表中。
然后JOIN并更新原始表。
当逻辑复杂时使用。
创建临时表需要权限。

4 使用数据库提供的功能。
例如MySQL的CASE语句。
在一个 UPDATE 语句中写入多个条件。
更新后的值对应于条件。
它通常更简洁。

您选择哪一个取决于具体情况。
数据库类型、数据量和逻辑复杂性。
由你决定。

oracle 单字段 批量更新的sql语句怎么写

这就是坑。
别相信。
不要这样做。

使用单个语句更新大量数据效率低下。
使用事务批量更新。
示例:一次 1 000 个项目。