使用 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
如果你想用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')
我在 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
如果你想用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')