PostgreSQL如何读取带小数逗号的csv文件?

m1m5dgzv  于 2023-09-28  发布在  PostgreSQL
关注(0)|答案(1)|浏览(103)

我尝试读取一个包含真实的的csv文件,并使用逗号作为分隔符。我尝试在psql中使用\copy读取这个文件:
\copy table FROM 'filename.csv' DELIMITER ';' CSV HEADER;
psql不承认逗号作为小数点.
psql:filename.sql:44:错误:真实的类型的输入语法无效:“9669,84”上下文:复制文件名,第2行,第3列:“九六六九,八十四”
我做了一些谷歌搜索,但找不到任何答案以外的“改变小数点逗号成小数点”。设置DECIMALSEPARATORCOMMA=ON;但这并不奏效。我还尝试了一些编码,但我无法找到编码是否控制小数点(我得到的印象是它没有)。
除了更改输入数据之外,真的没有其他解决方案吗?

sh7euo9m

sh7euo9m1#

COPY到一个表中,在该表中将数字插入varchar字段。然后在psql中执行以下操作:

--Temporarily change numeric formatting to one that uses ',' as
--decimal separator.
set lc_numeric = "de_DE.UTF-8";
--Below is just an example. In your case the select would be part of 
--insert into the target table. Also the first part of to_number
--would be the field from your staging table.
select to_number('9669,84', '99999D999');
9669.84

您可能需要更改格式字符串以匹配所有数字。有关可用内容的更多信息,请参见Data formatting表9 - 28。数字格式的模板模式。

相关问题