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

来源:互联网 发布:720云全景制作软件 编辑:程序博客网 时间:2024/05/22 15:56

今天建了一张视图,用于查看商品的折扣率,却发现折扣率在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.9SQL> /  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           1SQL> col discount for 0.09SQL> 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%