2017-10-25 7 views
0

최종 테이블로 가져올 CSV 파일을 정리하기 위해 임시 테이블을 만들었습니다. CSV 파일을 사용자가 자유롭게 편집 할 수 있다는 가정하에 임시 테이블을 varchar 데이터 형식으로 만들었습니다.PostgreSQL에서 데이터 삽입시 문자열 값을 정수로 변환하는 방법은 무엇입니까?

임시 테이블이 VARCHAR을 모든 동안 만 정수(예 : NETWORK_ID 및 AGENT_ID)을 받아 최종 테이블의 열이있는 내가 원치 않는 데이터를 걸러 일부 쿼리를 실행하지만 문제는 지금 데이터 형식.

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; 

그러나 나는 오류가 발생 :

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) 
); 

이 일을 나의 시도는 내가 어쩌면 내 캐스팅이 잘못된 혹은 더블 캐스팅이 필요하지만되는 것으로 의심

ERROR: column "network_id" is of type integer but expression is of type character

을 이 경우에 적용하는 방법에 대해서는 전혀 모른다. 귀하의 생각과 아이디어는 높이 평가 될 것입니다. 삽입을 할 때

답변

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 % 확신 할 수 없다. 그러나 삽입하려는 테이블 이름이 정의 된 테이블 이름과 다르므로 이것이 문제 일 수 있습니다.

+0

잘못 입력했는데 이미 편집했습니다. 나는 또한 귀하의 솔루션을 시도하고 네, 내 문제를 해결. 고마워요! – Junior