2013-09-09 3 views
2

Я импортирую 50 файлов данных CSV в postgres. У меня есть целое поле, где иногда значение является регулярным числом (с разделителями-запятой), а иногда оно находится в цитатах и ​​использует запятую для тысяч.Postgres Copy - Импортирование целого числа с запятой

Например, мне нужно импортировать как 4, так и 4 000.

Пытаюсь:

COPY race_blocks FROM '/census/race-data/al.csv' DELIMITER ',' CSV HEADER; 

И получаю ошибку:

ERROR: invalid input syntax for integer: "1,133"

Как я могу это сделать?

+4

Вы можете импортировать в временную таблицу такие цифры, как строки, а затем скопировать в реальную таблицу с соответствующим преобразованием. –

+0

@IgorRomanchenko Это должен быть ответ, это именно то, что я собирался предложить. Только говорите «текст», а не «строки», так как это PostgreSQL :) – IMSoP

ответ

3

Предположим, у вас есть только один столбец в ваших данных. Сначала нужно создать временную таблицу с колонкой VARCHAR:

CREATE TEMP TABLE race_blocks_temp (your_integer_field VARCHAR); 

Скопируйте данные из файла

COPY race_blocks_tmp FROM '/census/race-data/al.csv' DELIMITER ',' CSV HEADER; 

Remove «» из поля VARCHAR, преобразовывать данные в цифровой и вставить в таблицу.

INSERT INTO race_blocks regexp_replace(your_integer_field, ',', '') :: numeric AS some_colun FROM race_blocks_tmp; 
Смежные вопросы