我需要在postgresql中的数字字段上执行to_char。我还没有能够提出正确的格式字符串。我想得到一些帮助。
test=# select to_char(1.2, 'FM9999.9999'), to_char(1, 'FM9999.9999'), to_char(1.2212, 'FM9999.9999');
to_char | to_char | to_char
---------+---------+---------
1.2 | 1. | 1.2212
(1 row)
基本上,如果小数点后面没有地方,我就不应该有点。 to_char(1, fstring)
应生成1
,但to_char(1.23, fstring)
应生成“1.23”。我需要to_char
在python中的行为与str()
函数完全相同。例如在python控制台中:
>>> str(1.2)
'1.2'
>>> str(1)
'1'
>>> str(1.23)
'1.23'
我能找到的最接近的解决方案是使用强制转换函数。
=# select cast(1 as text), cast(1.2 as text), cast(12.3 as text), cast(1.0 as text);
text | text | text | text
------+------+------+------
1 | 1.2 | 12.3 | 1.0
有没有办法使用格式字符串实现相同。如果是这样,有人可以用正确的格式字符串帮助我吗?
答案 0 :(得分:1)
您可以创建一个功能:
create function to_ch (value numeric, format text)
returns text language sql as $$
select rtrim(to_char(value, format), '.')
$$;
select to_ch(1.2, 'FM9999.9999'), to_ch(1, 'FM9999.9999'), to_ch(1.2212, 'FM9999.9999');
to_ch | to_ch | to_ch
-------+-------+--------
1.2 | 1 | 1.2212
(1 row)
具有预定义格式的变体(可能更方便):
create function to_ch4 (value numeric)
returns text language sql as $$
select rtrim(to_char(value, 'FM9999.9999'), '.')
$$;
select to_ch4(1.2), to_ch4(1), to_ch4(1.2212);
to_ch4 | to_ch4 | to_ch4
--------+--------+--------
1.2 | 1 | 1.2212
(1 row)