如果数字是整数,如何删除to_char中的点

时间:2015-10-22 10:46:27

标签: postgresql

我需要在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

有没有办法使用格式字符串实现相同。如果是这样,有人可以用正确的格式字符串帮助我吗?

1 个答案:

答案 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)