将字符串的第n个元素替换为另一列中的元素

时间:2019-11-27 12:42:53

标签: string postgresql replaceall

如何在PostgreSQL中用另一个列值替换字符串元素?

例如: 我的表有两列:

element  seq
T       AAACGGG
G       TTTATTT

我要用第一列中提到的元素替换第四个元素。

预期输出:

element  seq     new_seq
T       AAACGGG  AAATGGG
G       TTTATTT  TTTGTTT

谢谢

2 个答案:

答案 0 :(得分:1)

有一个可以使用的叠加功能。

SELECT
  element,
  seq,
  overlay(seq placing element from 4 for 1) new_seq
FROM rna;

第一个数字参数是起始字符,第二个参数是要更改的字符数。

答案 1 :(得分:0)

如果您要使用基于正则表达式的解决方案,请使用REGEXP_REPLACE

SELECT
    element,
    seq,
    REGEXP_REPLACE(seq, '^(.{3}).(.*)', '\1' || element || '\2') AS new_seq
FROM yourTable;

Demo

我们也可以在此处使用SUBSTRING作为基本字符串选项:

SELECT
    element,
    seq,
    SUBSTRING(seq, 1, 3) || element || SUBSTRING(seq, 5) AS new_seq
FROM yourTable;

Demo

子字符串方法可能胜过正则表达式方法,因此,如果您真正关心性能,可能会使用它。