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
我正在尝试将数字转换为字符串并在 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