1. 程式人生 > >Oracle格式化數字的方法

Oracle格式化數字的方法

to_char,函式功能,就是將數值型或者日期型轉化為字元型。

比如最簡單的應用:

/*1.0123--->'1.0123'*/
Select TO_CHAR(1.0123) FROM DUAL
/*123--->'123'*/
Select TO_CHAR(123) FROM DUAL

接下來再看看下面:

/*0.123 ---> '.123' */
SELEC TO_CHAR(0.123) FROM DUAL

上面的結果 '.123' 在大多數情況下都不是我們想要的結果,我們想要的應該是 '0.123'。

我們來看一下to_char函式的具體用法:

TO_CHAR ( n [, fmt [, 'nlsparam']] )
該函式將NUMBER型別的n按數值格式fmt轉換成VARCHAR2型別的值。'nlsparams'指定由數值格式的元素返回的字元,包括:

.小數點字元

.組分隔符

.本地錢幣符號

.國際錢幣符號

變元的形式為:

'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'

其中d為小數點字元,g為組分隔符。

例 :TO_CHAR (17145,'L099G999','NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145

通過上面的瞭解,再檢視fmt的一些格式,我們可以用以下表達式得到'0.123'的值:

/*0.123 ---> ' 0.123' */  
Select TO_CHAR(0.123,'0.999') FROM DUAL
/*100.12 ---> '######' */  
Select TO_CHAR(100.12,'0.999') FROM DUAL
/*1.12 ---> ' 1.120' */  
Select TO_CHAR(1.12,'0.999') FROM DUAL

' 0.123'是出來了,可是前面又多了一個空格。

對於 100.12 的值卻是######,以及'1.12'的值變成了 '1.120'。

我們重新確定一個新的需求:

1、去空格

2、小數點最多4位,最少保留2位。

     1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';

     1.12345--->'1.1235'

最終實現如下:

/*
   FM :除空格   
   9999999.0099:允許小數點左邊最大正數為7位,小數點右邊最少2位,最多4位,且在第5位進行四捨五入
*/
  
Select TO_CHAR(123.0233,'FM9999999.0099') FROM DUAL