如何解决更改 psql 中数字的打印方式
如何在psql
中设置数字显示格式?
我在 character varying
查询中有许多 double precision
和 select
列。我可以在每个数字列上使用 to_char()
或 round()
,但是对于许多列,这会使代码过于重复。
有捷径吗?例如,是否有任何psql
会话设置,例如\pset numeric '9.9EEEEE'
(我只是编造的,不要尝试使用它)。我无法在手册中快速找到此类设置:PostgreSQL: Documentation: psql。
示例:
-- Got this:
=# select bar from (values (123456789),(0.123456789),(0.000000123456789)) table_foo (bar);
bar
-------------------
123456789
0.123456789
0.000000123456789
-- I have to use this workaround:
=# select to_char(bar,'9.9EEEEE') as bar from (values (123456789),(0.000000123456789)) table_foo (bar);
bar
----------
1.2e+08
1.2e-01
1.2e-07
-- I want this:
-- set some session settings,and then magically:
=# select bar from (values (123456789),(0.000000123456789)) table_foo (bar);
bar
----------
1.2e+08
1.2e-01
1.2e-07
解决方法
没有其他可能性来指定格式数然后指定数字语言环境。值已在服务器端格式化,psql
将格式化为最终输出格式(表、html、csv),但值已格式化,psql
不会尝试重新格式化({{1 }} 是一个例外)。我记得关于指定布尔类型输出格式的可能性的长期讨论,但仍然没有实际结果。 numericlocale
没有强大的功能来生成丰富的报告。它应该是快速、安全和健壮的交互式客户端。虽然我希望在这方面有更大的可能性,但现代电子表格和报告工具更适合某些任务。
您始终可以定义自己的格式设置函数,但您必须对许多列进行大量格式设置,才能将其视为可读性的改进。我不建议将它用于您的玩具示例,但如果您的实际查询有几十个列,它可能会更整洁。
sophia=> create function x(numeric) returns text language sql as $$ select to_char($1,'9.9EEEEE') $$;
CREATE FUNCTION
sophia=> select x(bar) from (values (123456789),(0.123456789),(0.000000123456789)) table_foo (bar);
x
----------
1.2e+08
1.2e-01
1.2e-07
(3 rows)
sophia=>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。