我有一个包含3列的表格:
customer_name varchar
,account_type varchar
,current_balance double precision
current_balance的示例值:
1200 1500.5 1500
我希望它们显示如下:
1200.00 1500.50 1500.00
我尝试了以下查询:
SELECT to_char(current_balance,'9999999999999999D99')
FROM bank;
它按照我想要的方式格式化,但在开头添加空格。怎么解决这个?有没有更好的格式化方法?
答案 0 :(得分:7)
正如评论中已经指出的那样it's bad design to use a floating point type (real, double, float) for a money balance。这会让你陷入困境。请改用DECIMAL
。
答案 1 :(得分:6)
您可以使用trim
删除多余的空格。没有参数,它只删除空格。
charles=# SELECT to_char(12345.67,'99999999999999999D99');
to_char
-----------------------
12345.67
(1 row)
charles=# SELECT trim(to_char(12345.67,'99999999999999999D99'));
btrim
----------
12345.67
(1 row)
答案 2 :(得分:2)
to_char(current_balance, 'FM9999999999999999D99')
来自the docs:
FM:前缀填充模式(抑制填充 空白和零)
如果您需要特定于区域设置的货币符号,请尝试L
:
to_char(current_balance, 'FML9999999999999999D99')
L:货币符号(使用区域设置)
PG 8.4对名为dbl
的列的结果,值为12345.678,其中id = 1:
>>> import psycopg2
>>> conn = psycopg2.connect(host='localhost', database='scratch', user='',password='')
>>> c = conn.cursor()
>>> c.execute("select to_char(dbl, '9999999999999999D99') from practice where id = 1;")
>>> c.fetchall() # with padding
[(' 12345.68',)]
>>> c.execute("select to_char(dbl, 'FM9999999999999999D99') from practice where id = 1;")
>>> c.fetchall() # no padding
[('12345.68',)]
>>> c.execute("select to_char(dbl, 'FML9999999999999999D99') from practice where id = 1;")
>>> c.fetchall() # with locale-specific currency symbol
[('$12345.68',)]