如何将含逗号作为小数点的CSV文件导入PostgreSQL?
无需更新和修改字段类型,直接导入带逗号小数点的数值到PostgreSQL numeric类型
完全可以做到,不用先导入文本列再做后续修改,下面是两种更简便的方案:
方案1:用外部工具预处理数据(推荐)
借助你已有的unixutils工具,在解压CSV的同时把逗号小数点替换为点,直接导入到numeric类型列:
COPY "t_test" ("textColumn", "numericColumn") FROM PROGRAM 'c:\unixutils\unzip -p C:\tmp\csv_dummy.zip | c:\unixutils\sed ''s/,/./g''' WITH ( FORMAT csv, DELIMITER ';', NULL 'NULL', header );
注意:如果数值里包含千位分隔符(比如1.234,56),需要调整sed命令先处理千位分隔符,例如sed ''s/\./,/g; s/,/./'',具体格式根据你的数据调整。
方案2:用临时表+内置函数转换
如果不想依赖外部工具,可通过临时表中转,一次性完成转换和导入:
-- 创建临时表存储原始文本数据 CREATE TEMP TABLE temp_import ( textColumn text, numeric_raw text ); -- 导入压缩CSV到临时表 COPY temp_import FROM PROGRAM 'c:\unixutils\unzip -p C:\tmp\csv_dummy.zip' WITH ( FORMAT csv, DELIMITER ';', NULL 'NULL', header ); -- 转换数值并插入正式表 INSERT INTO "t_test" ("textColumn", "numericColumn") SELECT textColumn, to_number(numeric_raw, '99999D999') -- 格式模板按需调整 FROM temp_import; -- 清理临时表 DROP TABLE temp_import;
这两种方案都省去了你原来的UPDATE和ALTER TABLE步骤,直接将数据导入为numeric类型。
内容的提问来源于stack exchange,提问作者Tibor
相关产品推荐
相关产品推荐

