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
相关产品推荐
相关产品推荐

