Postgres -使用同一个查询多次更新一个列



我有一个包含titledescriptionpost

我的目标是通过应用一组规则来清理描述。为简单起见,假设我想应用以下规则:

REPLACE "H" with "Z"
REPLACE "Z" with "C"
REPLACE "C" with "X"

如果我有字符串"Hello world",输出将是"Xello world">

Hello world -> Zello world -> Cello world -> Xello world

我知道我可以实现这使用3个独立的更新查询

UPDATE post
SET description = REPLACE(description, 'H', 'Z');
UPDATE post
SET description = REPLACE(description, 'Z', 'C');
UPDATE post
SET description = REPLACE(description, 'C', 'X');

但是我想知道是否有更好的方法来实现我想要的。也许我需要做个手术?一个函数?将中间结果存储在变量中?

我正在使用Postgres 12.

根据我的理解,您想要的是所有字符'H','Z''C'最终由X代替。
您可以使用TRANSLATE():

函数来实现。
UPDATE post
SET description = translate(description, 'HZC', 'XXX');

可以嵌套replace调用:

UPDATE post
SET description = replace(replace(replace(description, 'H', 'Z'), 'Z', 'C'), 'C', 'X')

UPDATE post
SET description = REPLACE(REPLACE(REPLACE(description, 'H', 'Z'), 'Z', 'C'), 'C', 'X');

最新更新