標籤:函數 轉換 完全 rac plain char cas 字串 中間
在銀行、財務等對數字要求敏感的系統中,數位顯示一般有著嚴格的要求。
今遇到一個需求,如題,要求將數字以兩位小數的格式顯示,如果沒有小數,則強制顯示為0。
例如:
123.4 顯示為 123.40
12 顯示為 12.00
0 顯示為 0.00
本以為這是個比較簡單的問題,Oracle本身提供了to_char函數,帶有格式化功能,能夠滿足條件:
[sql]
- select to_char(123.4, ‘9999990.00‘) as aa from dual;
- select to_char(12, ‘9999990.00‘) as aa from dual;
- select to_char(0, ‘9999990.00‘) as aa from dual;
-
- select to_char(123.4, ‘fm9999990.00‘) as aa from dual;
- select to_char(12, ‘fm9999990.00‘) as aa from dual;
- select to_char(0, ‘fm9999990.00‘) as aa from dual;
至此,本以為問題解決了,但是卻沒有注意到,以上的語句格式化的是字串,而不是數字!!
需求中,很明確的要求,將數字格式化,結果仍然為數字。
分析:該需求是一個非常常見、且正常的需求,既然Oracle如此強大,應該會提供相關的方法,
於是乎,尋找Oracle的相關文檔,終於,找到個有個cast函數,該函數負責類型轉換,嘗試之。
結果顯示,該方法確實可行。測試SQL語句如下:
[sql]
- select CAST(1234.4 AS NUMBER (10, 2) ) as aa from dual ;
- select CAST(12 AS NUMBER (10, 2) ) as aa from dual ;
- select CAST(0 AS NUMBER (10, 2) ) as aa from dual ;
PS:追加一點,字串可以直接進行類型轉換,而無需使用to_number()函數做中間轉換。SQL語句如下:
[sql]
- select CAST(‘1234.4‘ AS NUMBER (10, 2) ) as aa from dual ;
- select CAST(‘12‘ AS NUMBER (10, 2) ) as aa from dual ;
- select CAST(‘0‘ AS NUMBER (10, 2) ) as aa from dual ;
PS:追加第二點,網上看到有人說,小數點後是否顯示完全,PL/SQL的版本有關。
本人未做驗證,不發表個人意見,僅在此記錄一下,如以後遇到問題,再行驗證
Oracle資料庫,數字強制顯示2位小數