如何在Oracle中格式化
select TRIM(rtrim(to_char(10.00, '999990.9999999' ),'9999999999999990' ||
rpad('.',
8 + 1,
'0'))) from dual;
输出应为10
答案 0 :(得分:1)
如果您想要“10”,请使用trunc()
或floor()
:
select floor(10.00)
无需转换为字符串并返回数字。如果您希望将此值作为字符串,则可以执行以下操作:
select to_char(floor(10.00))
答案 1 :(得分:0)
假设您尝试删除小数点后的尾随零(如果没有其他尾随数字则小数点)但确保始终有一个整数位(因此0.06
未格式化为.06
)。
您的查询:
select TRIM(
rtrim(
to_char( 10.00, '999990.9999999' ),
'9999999999999990' || rpad( '.', 8 + 1, '0' )
)
)
from dual;
可以简化,因为rpad( '.', 8 + 1, '0' )
是.00000000
并且:
RTRIM( char, set )
从char
的{{1}}中删除set
中显示的所有字符。
因此RTRIM( ' 10.0000000', '9999999999999990.00000000' )
与RTRIM( ' 10.0000000', '90.' )
相同,并会删除字符串右侧的所有9
,0
和.
字符。这不是你想要的,因为它将删除小数部分并继续进入整数部分。
TRIM
会删除前导空格和尾随空格 - 如果您不首先生成任何空格,则不需要这样做,这就是FM
格式模型的用途。
所以你可以这样使用RTRIM( TO_CHAR( value, 'FM999990D9999999' ), '.' )
:
Oracle 11g R2架构设置:
CREATE TABLE data ( value ) AS
SELECT 10 FROM DUAL UNION ALL
SELECT 10.00 FROM DUAL UNION ALL
SELECT 10.01 FROM DUAL UNION ALL
SELECT 0.00 FROM DUAL UNION ALL
SELECT 0.06 FROM DUAL;
查询1 :
select value,
TO_CHAR( value ),
RTRIM( TO_CHAR( value, 'FM999990D9999999' ), '.' )
from data
<强> Results 强>:
| VALUE | TO_CHAR(VALUE) | RTRIM(TO_CHAR(VALUE,'FM999990D9999999'),'.') |
|-------|----------------|----------------------------------------------|
| 10 | 10 | 10 |
| 10 | 10 | 10 |
| 10.01 | 10.01 | 10.01 |
| 0 | 0 | 0 |
| 0.06 | .06 | 0.06 |