to_number函式()是oracle中常用的型別轉換函式之一,主要是將字串轉換為數值型的格式,與to_char()函式的作用正好相反。
to_number函式的格式如下:
to_number(varchar2 or
char,』format model』)
to_number函式中也有很多預定義的固定格式:
格式值含義
9
代表乙個數字
0
強迫0顯示
$
顯示美元符號
l
強制顯示乙個當地的貨幣符號
.
顯示乙個小數點
,
顯示乙個千位分隔符號
sql> select to_number(』rmb234234.4350′,』l999999.0000′) from dual;
to_number(』rmb234234.4350′,』l999999.0000′)
——————————————
234234.435
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
有的時候你會發現,使用了to_number()函式並且語法正確,但是oracle卻報「invalid number」的錯誤,而你在一遍又一遍認認真真檢查並確定語句無誤之後大呼驚奇,以為to_number()函式還有什麼可能不知道的用法。其實這很可能是你所查詢的資料出現了問題,而非sql。使用to_number()函式的時候,一定要確保所轉換欄位是可轉換為數字的,比如字串「20151008」是可以轉換為數字20151008的,但是字串「2015-10-08」不可以。如果你的字段中包含了字串「2015-10-08」,而你還直接使用了to_number()函式進行操作的話就會報「invalid number」的錯。
如何逃出陷阱呢?
盡量在使用者輸入的時候進行必要的校驗,確保輸入的數值就是我們需要的格式。
在後台**中進行必要的檢查,篩選到錯誤的值並且傳給前台合理的提示。
一旦你的數值進了資料庫,問題就變得複雜了。還有一種情況是,資料是歷史的,我們不能修改它,但是還要進行必要的查詢。這時候就需要在sql層面做點什麼了。假設需要使用to_number()函式的字段是varchar2型別的名為「status」。比如,如果非法資料都是比較長的,你可以在sql中加上長度的校驗,即多加乙個where條件:
length(status) <=10
或者,也可以將非法字元替換掉,,同樣是在where中多加乙個條件:
to_number(regexp_replace(status,'[^0-9]','')) > 30
例項中regexp_replace()將「status」欄位中所有非數字的字元替換為空字元,然後再用to_number()進行比較就可以啦! Oracle中to number 函式的學習
oracle中to number 函式的學習 1 converts a string to the number data type 將字串轉換為數字資料型別 to number return number select to number 00001228 from dual to number ...
Oracle中to number 函式的用法
類似於mysql 用cast就可,但要填適當的型別,示例 select cast 11 as unsigned int 整型 select cast 11 as decimal 10,2 浮點型 1 將char或varchar2型別的string轉換為乙個number型別的數值,需要注意的是,被轉換...
Oracle中TO NUMBER 函式的用法
1 用法簡介 to number函式 是oracle中常用的型別轉換函式之一,主要是將字串轉換為數值型的格式,與to char 函式的作用正好相反。to number函式的格式如下 to number varchar2 or char,format model 1to number函式中也有很多預定...