只有小于 1 的数字正确导出到 csv Postgresql

无神论者

我想导出这个结果:

id weight ref_id multiplier cat
1     1,2     1B        1,4 380
2     0,8     1C          1 379

其中 id 是 int8,weight 和 multiplier 是数字,ref_id 是 varchar(50),cat 是 int4。

问题是,当我导出到 csv 时,大于或等于 1 的权重和乘数值变成数千个数字,而其余的(在本例中为 0,8)保持不变(正如我希望的那样)。

我该如何解决这个问题,以便导出后数字保持不变?

阿德里安克拉弗

您正在处理语言环境问题。CSV 数据,用作小数分隔符,数据库使用的区域设置,为千位分隔符。确认在psql做:show lc_numeric;添加答案作为问题的更新。两种可能的解决方案 1) 将 CSV 数据中的 更改,.2)将数据导入到字段都是varchar的临时表中。然后使用to_numberfrom here数据格式将传输中的数字转换为决赛桌。这将涉及临时更改语言环境数字设置:


show lc_numeric;
 lc_numeric  
-------------
 en_US.UTF-8
select to_number('1,2', '9D9');
ERROR:  numeric field overflow
DETAIL:  A field with precision 1, scale 0 must round to an absolute value less than 10^1.

select to_number('1,2', '9G9');
 to_number 
-----------
        12

set lc_numeric = 'de_DE.UTF-8';
SET

production_(postgres)(5442)=# show lc_numeric;
 lc_numeric  
-------------
 de_DE.UTF-8

select to_number('1,2', '9D9');
 to_number 
-----------
       1.2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章