我有一个包含title
和description
的post
表
我的目标是通过应用一组规则来清理描述。为简单起见,假设我想应用以下规则:
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');