You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含逗号作为小数点的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:45:30