如何格式化Oracle中的NUMBER列?

时间:2013-06-24 20:32:00

标签: oracle numbers format

我尝试以spool输出一个很好的方式,所以我将所有VARCHAR2列格式化为a5。 但是,我有问题的列是:SLOTNUM类型为NUMBER(2),FEEADJUSTMENT类型为NUMBER(5,2)。 我的代码是:

column SLOTNUM format 999;
column FEEADJUSTMENT format 999.9;
.........
column [other VARCHAR2]     format a5;
select * from allTables;

结果是:

SLOTNUM DATEV ACTUA NOTES FEEADJUSTMENT TREAT NAME                                          
------- ----- ----- ----- ------------- ----- -----                                        
     12 19-JU 19-ju Treat           2.5 12345 Flu                                              
        N-13  n-13  ment                6     Shot                                       
              00:00 succe                                                                                   
              :00   ssful                                                                                    
                    l                                                                                       

     15 20-JU 20-ju Appar           5.5 12345 Flu                                                 
        N-13  n-13  atus                6     Shot                                                         
              02:00 broke                                                                                     
              :00                                                                                              

FEEADJUSTMENT占用的空间超出了需要。为什么format 999.9不截断FEEADJUSTMENT列?

2 个答案:

答案 0 :(得分:1)

格式化:

column SLOTNUM format a3;
column FEEADJUSTMENT format a5;

答案 1 :(得分:1)

因为它使用了列标题的长度,as the documentation说:

  

NUMBER列的宽度等于标题或宽度的宽度   FORMAT加上一个符号空格,以较大者为准。

您可以使用较短的名称为列添加别名:

select slotnum as slotn, ...

您也可以将其视为字符串,但您仍然需要别名:

select to_char(slotnum, 'FM9999') as slotn, ...

如果您愿意,可以将别名设为slotnum,并使用format a5,但我认为不太清楚。

我不确定我是否会强迫a5将所有内容强制为“不错”,特别是因为您的值比强制列包装的值大。我想是一个品味问题......