PostgreSQL用一个查询重命名json字符串中的多个子字符串

时间:2018-12-07 11:22:28

标签: string postgresql performance replace

我要保存更新请求。因此,不要这样做:

update table set column = REPLACE(column,'abc','xyz');
update table set column = REPLACE(column,'def','uvw');
...

我想做这样的事情:

UPDATE table
SET column =
CASE
    WHEN column like '%"abc":%' THEN REPLACE(column,'"abc":','"xyz":')
    WHEN column like '%"def":%' THEN REPLACE(column,'"def":','"uvw":')
    ...
END
WHERE COLUMN2 = 'something';

但是,这并没有实现我需要的那种循环。它只会替换找到的第一个匹配项。

我知道我也可以这样做:

update table
set column = REPLACE(REPLACE(column,'abc','xyz'),'def','uvw')
where COLUMN = 'something';

但是我不知道它们各自的性能。

1 个答案:

答案 0 :(得分:0)

您可以为嵌套替换尝试不同的格式:

update table
set column =    REPLACE(
                REPLACE(
                REPLACE(
                REPLACE(column, 'abc','xyz'),
                                'def','uvw'),
                                'zxc','acv'),
                                'xcv','bvn')
where COLUMN = 'something';