使用 Postgres 中的 Overlay 函数在不同位置更新具有多个值的同一列

Update same column with multiple values at different positions using Overlay function in Postgres

我在 table test 中有两列,如下所示。我想使用 Overlay 函数将消息中的第二个位置更新为 'K',将第四个位置更新为 'N',其中 id = 1。我可以根据以下查询更新第二个位置,但无法找到第四个位置的解决方案。

你能给我一些指导吗?谢谢。

Table test

    id | message
    ------------
    1  | ABCD
    2  | PQRS

我写了下面的查询:

update test
set message = overlay(message placing 'K' from 2 for 1)
where id = 1

我参考了 Postgres String Functions and Operators

如果你想用overlay()做这个,你需要调用它两次:

overlay(overlay('ABCD' placing 'K' from 2 for 1) placing 'N' from 4 for 1)

您也可以使用 substring():

substring(message, 1, 1) || 'K' || substr(message, 3, 1) || 'N' 

或者,如果 message 可以包含超过 4 个字符:

substring(message, 1, 1) || 'K' || substr(message, 3, 1) || 'N' || substr(message, 5)

最后:一个更简洁的选项(虽然可能效率较低)使用正则表达式:

regexp_replace(message, '^(.)(?:.)(.)(?:.)', 'KN')