首页 > 解决方案 > Postgresql - 将数值更改为另一种格式

问题描述

我在en_US语言环境中配置了一个数据库,但是我想做一个COPY命令以数字格式保存NUMERIC列。pt_BR

我可以仅更改活动会话的数字区域设置以获取正确格式的数字吗?

我得到什么(小数点分隔符上的点):

database=> SELECT value FROM myTable LIMIT 1;
  value
--------
   33.9
database=> show lc_numeric;
 lc_numeric 
------------
 C

我的期望(小数点分隔符上的逗号):

database=> SELECT value FROM myTable LIMIT 1;
  value
--------
   33,9

有一种方法可以仅在会话中更改吗?

我可以手动格式化输出(以一种丑陋的方式)但是,我想在会话中自动执行此操作:

database=> SELECT replace(replace(replace(round(value::numeric, 2)::varchar, '.','_'),',','.'),'_',',') FROM myTable LIMIT 1;
  value
--------
   33,9

标签: sqlpostgresqlcsv

解决方案


是的,您可以使用SET仅更改当前会话的参数,但它不会做您想要的。数据类型输出函数忽略lc_numeric. 这是有意的。

您需要使用to_char带国家小数分隔符的格式代码,请参阅文档

SET lc_numeric = 'pt_BR';

SELECT to_char(value, '9999D9999')
FROM mytable
LIMIT 1;

推荐阅读