如何将值插入到具有自动生成列的表中

问题描述 投票:0回答:1

我有一个名为“liverpool_players”的表,我正在尝试创建一个带有附加列“years_at_club”的新表,我的意思是在 2024 年 12 月 31 日自动生成该表。我在 PostgreSQL 中运行以下 sql 语句:

create table liverpool_players_new(
name varchar(30),
age int,
position varchar(10),
club_debut date,
years_at_club decimal(4,2) GENERATED ALWAYS as (('2024-12-31' - club_debut)/365.25) STORED,
country varchar(20)
);

insert into liverpool_players_new 
(select name, age, position, club_debut, [WHAT GOES HERE?], country from liverpool_players);

问题是,当从旧表复制值时,我不知道在“years_at_club”字段中放入什么内容。当我输入一个值(无论是计算值还是任何虚拟十进制数)时,我收到一条错误消息,该列是自动生成的,因此不应填充。当我完全省略该字段时,我收到尺寸不匹配的错误(如预期)。奇怪的是,当我将“years_at_club”列放在“CREATE TABLE”语句的末尾,然后在“INSER INTO”语句中省略其值时,它工作得很好!像这样:

create table liverpool_players_new(
name varchar(30),
age int,
position varchar(10),
club_debut date,
country varchar(20),
years_at_club decimal(4,2) GENERATED ALWAYS as (('2024-12-31' - club_debut)/365.25) STORED
);

insert into liverpool_players_new 
(select name, age, position, club_debut, country from liverpool_players);

但我很固执,我希望能够自由选择我的“years_at_club”栏的确切位置! :)

如有任何帮助,我们将不胜感激。先谢谢你了

sql postgresql
1个回答
0
投票

除了指定列名之外,您还可以使用

default
值:

insert into liverpool_players_new (name, age, position, club_debut, years_at_club, country) 
 values ('test',1,'test', current_date, default, 'test');
© www.soinside.com 2019 - 2024. All rights reserved.