我想导出这个结果:
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_number
from 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] 删除。
我来说两句