to_char()问题小数点和千位分隔符

to_char() problem decimal points and thousand separator

我正在尝试将数字转换为字符串并在 Oracle 数据库中使用 to_Char 应用格式。

这就是我想要的(左边的值示例和我在左边之后的值):

0                   --> 0
0.29                --> 0.29
25319,76            --> 25,319.76
12252,136456        --> 12,252.13

我能想到的最佳格式是 SQL:

to_char(var, 'B99,999,999,999.09')

这是结果:

0                   --> nothing
0.29                --> .29
25319,76            --> 25,319.76
12252,136456        --> 12,252.13

所以我的问题是 0.29 和 0。我怎样才能让那部分工作?

BR 克雷斯滕

您可能希望在 小数点前 格式中使用 0

您还可以添加 FM 前缀而不是 B 以去除前导空格和尾随零。

之后您可以使用rtrim(..., '.')删除尾随小数点。

(参见 Oracle Format Models documentation

select v, rtrim(to_char(v, 'FM99,999,999,990.99'), '.') from
  (select 0 as v from dual
   union all select 0.29 from dual
   union all select 25319.76 from dual
   union all select 12252.136456 from dual
  ) t
;  

/* output:
           0    0
         .29    0.29
    25319.76    25,319.76
12252.136456    12,252.14
*/

B format model:

Returns blanks for the integer part of a fixed-point number when the integer part is zero (regardless of zeros in the format model).

并且由于您不想要空白整数部分,因此您可能不想使用 B 格式模型;相反,您希望 FM format model 是:

Returns a value with no leading or trailing blanks.

您可以使用 RTRIM( TO_CHAR(var, 'FM99,999,999,990.99' ), '.' ).

例如:

SELECT var,
       RTRIM( TO_CHAR(var, 'FM99,999,999,990.99' ), '.' ) AS formatted_value
FROM   table_name;

其中,对于示例数据:

CREATE TABLE table_name ( var ) AS
SELECT     0        FROM DUAL UNION ALL
SELECT     0.29     FROM DUAL UNION ALL
SELECT 25319.76     FROM DUAL UNION ALL
SELECT 12252.136456 FROM DUAL;

输出:

         VAR | FORMATTED_VALUE
-----------: | :--------------
           0 | 0              
         .29 | 0.29           
    25319.76 | 25,319.76      
12252.136456 | 12,252.14      

db<>fiddle here