如何在Postgresql中插入数据时将字符串值转换为整数?

如何在Postgresql中插入数据时将字符串值转换为整数?,sql,postgresql,casting,Sql,Postgresql,Casting,我创建了一个临时表,希望清理将导入到最终表中的CSV文件。由于假设CSV文件可以由用户自由编辑,因此我以varchar数据类型创建了一个临时表 我执行一些查询以删除不需要的数据,但现在的问题是,最终表中有一些列只接受整数值(例如,network_id和agent_id),而临时表都在varchar数据类型中 CREATE TABLE IF NOT EXISTS dummy_table( network_address varchar(128), network_alias var

我创建了一个临时表,希望清理将导入到最终表中的CSV文件。由于假设CSV文件可以由用户自由编辑,因此我以varchar数据类型创建了一个临时表

我执行一些查询以删除不需要的数据,但现在的问题是,最终表中有一些列只接受整数值(例如,network_id和agent_id),而临时表都在varchar数据类型中

CREATE TABLE IF NOT EXISTS dummy_table(
    network_address varchar(128),
    network_alias varchar(64),
    network_id varchar(64) NOT NULL,
    agent_id varchar(64),
    agent_name varchar(64) NOT NULL,
    property_value varchar(128)
);

CREATE TABLE IF NOT EXISTS main_table(
    network_address varchar(128),
    network_alias varchar(64),
    network_id int4 NOT NULL,
    agent_id int4,
    agent_name varchar(64) NOT NULL,
    property_value varchar(128)
);
我的尝试是:

INSERT INTO main_table
SELECT network_address, 
       network_alias, 
       CAST(network_id AS INTEGER), 
       CAST(agent_id AS INTEGER), 
       agent_name, 
       property_value 
FROM dummy_table;
但我遇到了一个错误:

错误:“网络id”列的类型为整数,但表达式的类型为字符


我怀疑可能我的施法不正确,或者可能需要双重施法,但我不知道如何应用,如果是这样的话。您的想法和想法将受到高度赞赏。

在插入时,您应始终明确列出以下列:

INSERT INTO main_table (network_address, network_alias, network_id, agent_id, agent_name, property_value)
    SELECT network_address, network_alias, network_id::INTEGER,    
           agent_id::INTEGER, agent_name, property_value
     FROM dummy_table;

我不能100%肯定这就是问题所在。但是,您插入的表名与定义的表名不同,因此我怀疑这可能是问题所在。

我键入的表名错误,但我已经编辑过了。我也尝试了你的解决方案,是的,它解决了我的问题。非常感谢你!