程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORACLE TO_CHAR函數格式化數字的出現空格的原因,oracleto_char

ORACLE TO_CHAR函數格式化數字的出現空格的原因,oracleto_char

編輯:Oracle教程

ORACLE TO_CHAR函數格式化數字的出現空格的原因,oracleto_char


   在這篇博客SQL挑戰——如何高效生成編碼裡面我由於需要將數字格式化為字符,像12需要格式化0012這樣的字符,所以使用了TO_CHAR(數字,'0000')這樣的寫法,後面0000表示缺省補零,測試過程中,我發發現TO_CHAR(number,'0000') 會多一個空格。有點納悶為什麼了會多一個空格。

後面經過查看官方文檔、同事討論以及網友提供的資料,終於把這個問題給弄清楚了。下面梳理、總結於此,希望對其它人有所幫助。

在官方文檔https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570裡面你能看到一段介紹

Number Format Elements

A number format model is composed of one or more number format elements. The tables that follow list the elements of a number format model and provide some examples.

Negative return values automatically contain a leading negative sign and positive values automatically contain a leading space unless the format model contains the MI, S, or PR format element.

注意紅色部分,意思是Number類型轉換為字符時,負數會返回前面包含負號的字符串,正數則會返回前面包含空格的字符串,除非格式模式包含MI、S、或PR元素。查看TO_CHAR(4, '0000')返回的字符串長度,你會發現其長度為5.

   1: SQL> SELECT TO_CHAR(4, '0000') FROM DUAL;
   2:  
   3: TO_CH
   4: -----
   5:  0004
   6:  
   7: SQL> SELECT LENGTH(TO_CHAR(4, '0000')) FROM DUAL;
   8:  
   9: LENGTH(TO_CHAR(4,'0000'))
  10: -------------------------
  11:                         5
  12:  
  13: SQL> SELECT TO_CHAR(-4, '0000') FROM DUAL;
  14:  
  15: TO_CH
  16: -----
  17: -0004

那麼如何解決這個問題呢,目前有兩種方法,一種方法是用TRIM去空格,另外一種是使用參數MI(MI參數是正數的空格放到字符串後面,將負數的負號放置在字符串後面),關於參數MI的解釋如下所示:

      Returns negative value with a trailing minus sign (-).

      Returns positive value with a trailing blank.

      Restriction: The MI format element can appear only in the last position of a number format model.

      返回負值與尾隨的負號 (-)。

      返回正值尾隨空白。

      限制: MI 格式元素可以只能出現在數字的格式模式的最後一個位置。

 

其實這些還只是TO_CHAR函數的冰山一角,如果你通讀文檔https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570那麼你會發現其實你所掌握的TO_CHAR函數還只是個皮毛而已。一個TO_CHAR函數如此強大,可見ORACLE的博大精深。

 

參考資料:

    http://blog.163.com/wangpeng126_2009@126/blog/static/121022611201454111640254/ 

                  https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved