Oracle 去掉小數末尾的0的方法

來源:互聯網
上載者:User

Oracle PL/SQL查詢語句有的時候要將number類型的欄位轉換成varchar2類型
在報表或頁面上經常會出現:

.440
.441
1.0
10.100

之類的資料,要不就是小數點前面的0被to_char或cast函數去掉了,或是末尾的無效小數位上的0沒有被去掉,很是鬧心。
jsp介面上還好處理,可以用類似下面的方法來處理:
Jsp代碼

  1. 體重:<ww:text name='format.num.3'><ww:param value='person.weight'/></ww:text>(Km)  
體重:<ww:text name='format.num.3'><ww:param value='person.weight'/></ww:text>(Km)

但是在超級報表中,儲存格中要顯示的數字就不太好處理了,要將查詢出的欄位進行處理,
下面我總結了一下處理方法:
step1:格式化將小數點前的0保留、去掉末尾的0,去掉前面因格式化產生的多餘的空格:
Plsql代碼
  1. select t.num from(   
  2.     select ltrim(rtrim(to_char(0.44, '99990.000'), '0') , ' ') as num from dual union   
  3.     select ltrim(rtrim(to_char(0.441, '99990.000'), '0'), ' ') as num from dual union   
  4.     select ltrim(rtrim(to_char(1.0, '99990.0'), '0'), ' ') as num from dual union   
  5.     select ltrim(rtrim(to_char(10.100, '99990.000'), '0'), ' ') as num from dual   
  6. )t   
  7.   
  8. /*   
  9. 結果:   
  10. 0.44  
  11. 0.441  
  12. 1.   
  13. 10.1  
  14. */  
select t.num from(    select ltrim(rtrim(to_char(0.44, '99990.000'), '0') , ' ') as num from dual union    select ltrim(rtrim(to_char(0.441, '99990.000'), '0'), ' ') as num from dual union    select ltrim(rtrim(to_char(1.0, '99990.0'), '0'), ' ') as num from dual union    select ltrim(rtrim(to_char(10.100, '99990.000'), '0'), ' ') as num from dual)t/*結果:0.440.4411.10.1*/


step2:去掉可以多餘的小數點:
Plsql代碼
  1. select    
  2.     (case when instr(t.num,'.')=length(t.num) then rtrim(t.num,'.') else t.num end) as num   
  3. from(   
  4.     select ltrim(rtrim(to_char(0.44, '99990.000'), '0') , ' ') as num from dual union   
  5.     select ltrim(rtrim(to_char(0.441, '99990.000'), '0'), ' ') as num from dual union   
  6.     select ltrim(rtrim(to_char(1.0, '99990.0'), '0'), ' ') as num from dual union   
  7.     select ltrim(rtrim(to_char(10.100, '99990.000'), '0'), ' ') as num from dual   
  8. )t   
  9.   
  10. /*   
  11. 結果:   
  12. 0.44  
  13. 0.441  
  14. 1  
  15. 10.1  
  16. */  

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.