postgresql如何让COPY自动解释格式化的数字字段?

标签 postgresql sqlbulkcopy

我有一个输入 CSV 文件,其中包含以下内容:

SD-32MM-1001,"100.00",4/11/2012
SD-32MM-1001,"1,000.00",4/12/2012

我试图将其复制导入到 postgresql 表(varchar,float8,date)中并遇到错误:

# copy foo from '/tmp/foo.csv' with header csv;
ERROR:  invalid input syntax for type double precision: "1,000.00"
Time: 1.251 ms

除了预处理输入文件之外,PG 中是否有一些设置可以让它读取像上面这样的文件并在 COPY 中转换为数字形式?除了复制之外还有什么?

如果需要预处理,是否可以将其设置为 COPY 命令的一部分? (不是psql\copy)?

非常感谢。

最佳答案

预处理的选项是首先将其作为文本复制到临时表中。使用 to_number 函数从那里插入最终表:

select to_number('1,000.00', 'FM000,009.99')::double precision;

关于postgresql如何让COPY自动解释格式化的数字字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110175/

相关文章:

c# - IDataReader 与 DataTable;优点和缺点

postgresql - 现有索引对 COPY FROM 性能的影响

sql - 在postgres中如何找到数组中最短的字符串

postgresql - 从 Python 容器连接到 postgres 时出错

sql-server - 如何在 sql azure 中将 SqlBulkCopy 与 ReliableSqlConnection 上的事务结合使用

c# - 让 SqlBulkCopy 接受列名

.net - SqlBulkCopy 如何工作

sql - 求每个D的总点数,如果P中没有D,那么points应该为0

postgresql - 是否有等同于PostgreSQL的Redgate SQL Compare

postgresql - 如何将混合或完全大写的表名从一个 postgres 数据库复制到另一个数据库?