【发布时间】:2018-12-07 11:22:28
【问题描述】:
我想保存更新请求。所以不要这样做:
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';
但我不知道他们每个人的表现。
【问题讨论】:
-
嵌套替换语句看起来是解决您的问题恕我直言的好方法。
-
关于您对 CASE 的陈述,
column是否/可以同时包含“abc”和“def”?如果是这样,那么带有多个 REPLACE 命令的语句就是要走的路。 -
json 字符串包含“abc”和“def”。但是使用嵌套替换和大约 10 个字符串,它看起来很混乱。我认为我可以做得更好。
-
那么 CASE 语句不能正常工作的原因是因为只有一个 CASE 路径会被执行;如果
column like '%"abc":%'那么它将执行第一次替换,这将是该字段的 CASE 语句评估的结束,它不会继续检查它是否包含“def”等。
标签: string postgresql performance replace