更改数字在 psql 中的打印方式
Change how numbers are printed in psql
如何在psql
中设置数字显示格式?
我在 select
查询中有 many character varying
和 double precision
列。我可以在每个数字列上使用 to_char()
or round()
,但是对于很多列,这会使代码过于重复。
有捷径吗?比如,有没有什么psql
session设置,比如\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.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.123456789), (0.000000123456789)) table_foo (bar);
bar
----------
1.2e+08
1.2e-01
1.2e-07
除指定数字区域设置外,没有其他可能指定格式数。值已经在服务器端格式化,psql
格式化为最终输出格式(table、html、csv),但值已格式化,而 psql
没有尝试重新格式化(numericlocale
是一个例外)。我记得关于指定布尔类型输出格式的可能性的长时间讨论,但仍然没有实际结果。 psql
生成富报表的功能不强。它应该是快速、安全和健壮的交互式客户端。虽然我希望在这方面有更大的可能性,但现代电子表格和报告工具更适合某些任务。
您始终可以定义自己的格式化函数,但您必须对很多列进行大量格式化才能将其视为提高可读性。我不会推荐它用于您的玩具示例,但如果您的真实查询有几十列,它可能会更整洁。
sophia=> create function x(numeric) returns text language sql as $$ select to_char(, '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=>
如何在psql
中设置数字显示格式?
我在 select
查询中有 many character varying
和 double precision
列。我可以在每个数字列上使用 to_char()
or round()
,但是对于很多列,这会使代码过于重复。
有捷径吗?比如,有没有什么psql
session设置,比如\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.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.123456789), (0.000000123456789)) table_foo (bar);
bar
----------
1.2e+08
1.2e-01
1.2e-07
除指定数字区域设置外,没有其他可能指定格式数。值已经在服务器端格式化,psql
格式化为最终输出格式(table、html、csv),但值已格式化,而 psql
没有尝试重新格式化(numericlocale
是一个例外)。我记得关于指定布尔类型输出格式的可能性的长时间讨论,但仍然没有实际结果。 psql
生成富报表的功能不强。它应该是快速、安全和健壮的交互式客户端。虽然我希望在这方面有更大的可能性,但现代电子表格和报告工具更适合某些任务。
您始终可以定义自己的格式化函数,但您必须对很多列进行大量格式化才能将其视为提高可读性。我不会推荐它用于您的玩具示例,但如果您的真实查询有几十列,它可能会更整洁。
sophia=> create function x(numeric) returns text language sql as $$ select to_char(, '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=>