在更改一列时,在SQL表中创建行的副本

时间:2017-02-14 20:58:50

标签: sql postgresql sql-insert

我们说我有一个样本表:

characterid Primay Key
charactername
charatertype
picture1
picture2

另外,我们假设此表中有数千行。

我想选择所有:where characterid like 'a%'行,然后在更改其“#id”字符时创建所选内容的重复行。由于characterid是主键,因此我无法复制。

新插入的行将具有类似的字符,除了第一个字母' a'这将改为' b'。

到目前为止,我走了多远:

INSERT INTO sample
    SELECT * FROM sample WHERE characterid LIKE 'a%';

2 个答案:

答案 0 :(得分:2)

使用concat和substr函数替换字符id中的第一个字符:

INSERT INTO sample (characterid, charactername, charatertype, picture1, picture2) 
SELECT concat('b',SUBSTR (characterid, 2, len(characterid()) , charactername, charatertype, picture1, picture2
  FROM sample WHERE characterid like  'a%';

答案 1 :(得分:1)

我认为最简单的方式表达为:

INSERT INTO sample (characterid, charactername, charatertype, picture1, picture2) 
    SELECT 'b' || SUBSTR(characterid, 2), . . .
      FROM sample WHERE characterid like  'a%';

Postgres不需要substr()的第三个参数。