表test
中有两列,如下所示。我想使用 Overlay 函数将消息中的第二个位置更新为“K”,将第四个位置更新为“N”,其中 id = 1
。我可以按照下面的查询更新第二个位置,但无法找到第四个位置的解决方案。
您能给我一些指导吗?谢谢。
表测试
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'
或者,如果消息
可以包含超过4个字符:
substring(message, 1, 1) || 'K' || substr(message, 3, 1) || 'N' || substr(message, 5)
最后:一个更简洁的选项(尽管可能效率较低)使用正则表达式:
regexp_replace(message, '^(.)(?:.)(.)(?:.)', '\1K\2N')
关于sql - 使用 Postgres 中的 Overlay 函数在不同位置更新同一列的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64158667/