无法在sql中格式化实数

时间:2018-03-27 10:19:36

标签: sql oracle formatting

如何在Oracle中格式化

select TRIM(rtrim(to_char(10.00, '999990.9999999' ),'9999999999999990' ||
                          rpad('.',
                               8 + 1,
                               '0'))) from dual;

输出应为10

2 个答案:

答案 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.' )相同,并会删除字符串右侧的所有90.字符。这不是你想要的,因为它将删除小数部分并继续进入整数部分。

TRIM会删除前导空格和尾随空格 - 如果您不首先生成任何空格,则不需要这样做,这就是FM格式模型的用途。

所以你可以这样使用RTRIM( TO_CHAR( value, 'FM999990D9999999' ), '.' )

SQL Fiddle

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 |