You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何通过数组循环批量执行字符替换更新SQL语句

解决方案

方案1:DO匿名块循环实现(匹配你要求的数组遍历逻辑)

PostgreSQL 原生 SQL 不支持直接写循环逻辑,你可以通过 DO 语句执行匿名 PL/pgSQL 块实现需求,代码可直接运行:

DO $$
DECLARE
    -- 声明要替换的特殊字符数组、对应替换结果数组
    array1 text[] := ARRAY['Á','Â','Ã','Ä','Å'];
    array2 text[] := ARRAY['A','A','A','A','A'];
BEGIN
    -- 注意PostgreSQL数组默认下标从1开始,不是0
    FOR i IN 1..array_length(array1, 1) LOOP
        UPDATE public.register 
        SET address = replace(address, array1[i], array2[i]) 
        WHERE address LIKE '%'||array1[i]||'%';
    END LOOP;
END $$;

方案2:更高性能的单句实现(无需循环,更推荐)

你的场景属于多字符一对一替换,用 PostgreSQL 内置的 translate 函数可以一次完成所有替换,仅需扫描一次表,性能远高于循环执行多次 UPDATE:

UPDATE public.register 
SET address = translate(address, 'ÁÂÃÄÅ', 'AAAAA')
WHERE address ~ '[ÁÂÃÄÅ]';

*注意:执行批量更新前建议先执行 SELECT address, translate(address, 'ÁÂÃÄÅ', 'AAAAA') FROM public.register WHERE address ~ '[ÁÂÃÄÅ]' 验证替换效果,确认符合预期后再执行更新操作,避免数据错误。

内容的提问来源于stack exchange,提问作者Artur Dino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:15:04