关于在SQLPLUS中小数不显示小数点前0的问题

今天建了一张视图,用于查看商品的折扣率,却发现折扣率在SQLPLUS中居然有显示问题,而在其他软件上却没有,于是研究了一下SQLPLUS的数字显示问题,分享一下。

一、问题描述
SQL> select * from retail_d;

        ID BILLDATE    QTY     TOT_AMT_LIST TOT_AMT_ACTUAL   DISCOUNT
---------- -------- ---------- ------------ -------------- ----------
      1001 20170501      3        12000      10000         .833333333
      1002 20170502      2        11000       9000         .818181818
      1003 20170503      1        10000       8000         .8
      1004 20160501      5        10000       8000         .8
      1005 20160502      5        15000       8000         .533333333
      1006 20160503      1         5000       5000          1
      1007 20170401      2        10000       5000         .5
      1008 20170402      2        10000       5000         .5
      1009 20170403      2        10000      10000          1
      2005 20170405      1         5000       5000          1
      2007 20170506      1         5000       5000          1

二、解决思路
由于在其他软件上显示正常,且这是一列虚列,所以一定不是数据问题。百度了一下,居然有人说转成string然后拼接个0,感觉不太靠谱,所以继续研究。

先看一下所有的小数的显示情况:

SQL> select 0.5 as id from dual;

       id
----------
       .5

可以确定这一定是显示问题了

三、解决问题

SQL> col id for 0.9
SQL> /

  ID
----
 0.5

使用COL 指令,修改列的显示格式

SQL> select * from retail_d;

  ID BILLDATE        QTY TOT_AMT_LIST TOT_AMT_ACTUAL   DISCOUNT
 ---- -------- ---------- ------------ -------------- ----------
 #### 20170501         3    12000      10000          .833333333
 #### 20170502         2    11000       9000          .818181818
 #### 20170503         1    10000       8000          .8
 #### 20160501         5    10000       8000          .8
 #### 20160502         5    15000       8000          .533333333
 #### 20160503         1     5000       5000           1
 #### 20170401         2    10000       5000          .5
 #### 20170402         2    10000       5000          .5
 #### 20170403         2    10000      10000           1
 #### 20170405         1     5000       5000           1
 #### 20170506         1     5000       5000           1

SQL> col discount for 0.09
SQL> select * from retail_d;

ID BILLDATE      QTY TOT_AMT_LIST TOT_AMT_ACTUAL DISCOUNT
---- -------- ---------- ------------ -------------- --------
#### 20170501          3    12000          10000     0.83
#### 20170502          2    11000           9000     0.82
#### 20170503          1    10000           8000     0.80
#### 20160501          5    10000           8000     0.80
#### 20160502          5    15000           8000     0.53
#### 20160503          1     5000           5000     1.00
#### 20170401          2    10000           5000     0.50
#### 20170402          2    10000           5000     0.50
#### 20170403          2    10000          10000     1.00
#### 20170405          1     5000           5000     1.00
#### 20170506          1     5000           5000     1.00

多加一个0,即是多保留一位小数,还是很好理解的。

三、拓展
如果要显示为百分比的格式,或许就必须通过拼接字符串来实现了

SQL> select round(discount*100,2)||'%' as discount from retail_d;


DISCOUNT
-----------------------------------------
83.33%
81.82%
80%
80%
53.33%
100%
50%
50%
100%
100%
100%

版权声明:本文为dushihuiand1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。