類似於mysql
用cast就可,但要填適當的類型,樣本:
select cast(11 as unsigned int) /*整型*/
select cast(11 as decimal(10,2)) /*浮點型*/
(1)將char或varchar2類型的string轉換為一個number類型的數值,
需要注意的是,被轉換的字串必須符合數實值型別格式,如果被轉換的
字串不符合數值型格式,Oracle將拋出錯誤提示;
(2)to_number和to_char恰好是兩個相反的函數;
to_number(varchar2 or char,'格式')
[sql] view plain copy select to_number('000012134') from dual; select to_number('88877') from dual;
(2)如果數字在格式範圍內的話,就是正確的,否則就是錯誤的;如:
[sql] view plain copy select to_number('$12345.678', '$999999.99') from dual; select to_number('$12345.678', '$999999.999') from dual;
(3)可以用來實現進位轉換;16進位轉換為10進位:
[sql] view plain copy select to_number('19f','xxx') from dual; select to_number('f','xx') from dual;
1 用法簡介
TO_NUMBER函數()是Oracle中常用的類型轉換函式之一,主要是將字串轉換為數值型的格式,與TO_CHAR()函數的作用正好相反。
To_number函數的格式如下:
To_number(varchar2 or char,’format model’)
1 1
To_number函數中也有很多預定義的固定格式:
| 格式值 |
含義 |
| 9 |
代表一個數字 |
| 0 |
強迫0顯示 |
| $ |
顯示貨幣符號 |
| L |
強制顯示一個當地的貨幣符號 |
| . |
顯示一個小數點 |
| , |
顯示一個千位分隔字元號 |
2 一些例子
SQL> select to_number(’RMB234234.4350′,’L999999.0000′) from dual; TO_NUMBER(’RMB234234.4350′,’L999999.0000′) —————————————— 234234.435
1 2 3 4 1 2 3 4
SQL> select to_number(’$123,233,455,623.3400′,’$999,999,999,999.0000′) from dual; TO_NUMBER(’$123,233,455,623.3400′,’$999,999,999,999.0000′) ———————————————————- 1.2323E+11
1 2 3 4 1 2 3 4
3 用法陷阱
有的時候你會發現,使用了TO_NUMBER()函數並且文法正確,但是Oracle卻報“invalid number”的錯誤,而你在一遍又一遍認認真真檢查並確定語句無誤之後大呼驚奇,以為TO_NUMBER()函數還有什麼可能不知道的用法。其實這很可能是你所查詢的資料出現了問題,而非SQL。使用TO_NUMBER()函數的時候,一定要確保所轉換欄位是可轉換為數位,比如字串“20151008”是可以轉換為數字20151008的,但是字串“2015-10-08”不可以。如果你的欄位中包含了字串“2015-10-08”,而你還直接使用了TO_NUMBER()函數進行操作的話就會報“invalid number”的錯。 4 逃出陷阱
如何逃出陷阱呢。 1 前端校正
盡量在使用者輸入的時候進行必要的校正,確保輸入的數值就是我們需要的格式。 2 後台校正
在後台代碼中進行必要的檢查,篩選到錯誤的值並且傳給前台合理的提示。 3 SQL校正