如何在Postgresql中插入数据时将String值转换为Integer?

时间:2017-10-25 02:41:54

标签: sql postgresql casting

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

我执行了一些查询以清除不需要的数据但现在问题是最终表中的列只接受 Integer (例如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;

但是我遇到了一个错误:

  

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

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

1 个答案:

答案 0 :(得分:1)

进行插入时,应始终明确列出列:

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%确定这是问题所在。但是,您插入的表名与定义的表名不同,因此我怀疑这可能是问题所在。