1. 程式人生 > >Oracle中TO_NUMBER()函式的用法

Oracle中TO_NUMBER()函式的用法

1 用法簡介

TO_NUMBER函式()是Oracle中常用的型別轉換函式之一,主要是將字串轉換為數值型的格式,與TO_CHAR()函式的作用正好相反。

To_number函式的格式如下:

To_number(varchar2 or char,’format model’)

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
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

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校驗

一旦你的數值進了資料庫,問題就變得複雜了。還有一種情況是,資料是歷史的,我們不能修改它,但是還要進行必要的查詢。這時候就需要在SQL層面做點什麼了。假設需要使用TO_NUMBER()函式的欄位是varchar2型別的名為“status”。比如,如果非法資料都是比較長的,你可以在SQL中加上長度的校驗,即多加一個where條件:

LENGTH(status) <= 10

或者,也可以將非法字元替換掉,,同樣是在where中多加一個條件:

TO_NUMBER(REGEXP_REPLACE(status,'[^0-9]','')) > 30

例項中REGEXP_REPLACE()將“status”欄位中所有非數字的字元替換為空字元,然後再用TO_NUMBER()進行比較就可以啦!

相關推薦

OracleTO_NUMBER()函式用法

1 用法簡介 TO_NUMBER函式()是Oracle中常用的型別轉換函式之一,主要是將字串轉換為數值型的格式,與TO_CHAR()函式的作用正好相反。 To_number函式的格式如下: To_number(varchar2 or char,’forma

【轉載】oracledecode函式用法

1、DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else)。表示假設value 等於if1時,DECODE函式的結果返回then1,...,假設不等於不論什麼一個if值。則返回else 2、該函式的含義例如以下:  IF 條件=值1 TH

oracle 日期函式用法

  這裡需求是把原來的字元型的日期  01.02.2013   改成 20130201     先把字元轉換成日期的  再按日期轉字元處理  update 表名 a set a.calday = to_char( to_date(a.calday, 'dd.MM.yyyy

Oracle decode 函式用法 與lpad結合

 //decode 函式用法: decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,預設值) 該函式的含義如下: IF 條件=值1 THEN     RETURN(翻譯值1) ELSIF 條件=值2 THEN     RETURN(翻譯值2)   

Oracleadd_months()函式用法

查詢當前時間1個月以前的時間: select add_months(sysdate,-1) from dual; 查詢當前時間1個月以後的時間:   select add_months(sysdate,1) from dual;   如對公司員工表:查詢2年前進入公司的員工的姓

Oracle null判斷並替換空值 ORACLEDECODE的用法(例子) Oracle的NVL函式用法 用 ISNULL(), NVL(), IFNULL() and COALESCE() 函式替換空值

  可用 NVL(), IFNULL() ,COALESCE(),DECODE() 函式 1.NVL() 從兩個表示式返回一個非 null 值。語法NVL(eExpression1, eExpression2)引數eExpression1, eExpression2 如果 eExpressio

ORACLE部分函式用法

select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else)

分組函式group by和Oracle分析函式partition by的用法以及區別

       今天有個同事給我打電話問我題目列出的這個問題,在日常開發中,確實它們倆都是與分組有關的,但是需要注意的是一個是分組函式另一個是分析函式,講解用到的表就以Oracle中schema的scott的EMP表和DEPT表為例做講解:        老總下命令說:需要統

Oraclecoalesce函式用法

學習了幾天教主的書,今天看到coalesce函式,功能很強大啊!coalesce函式的引數是列,結果是取出第一個不為空的列的資料。 首先,建一個檢視: CREATEORREPLACEVIEW v ASSELECTNULLAS c1,NULLAS c2,1 AS 

oracleINSTR函式用法

今天有個同學問我這個INSTR函式,我也不太清楚就上網查了查做一個小小的記錄吧 INSTR(C1,C2,I,J) 在一個字串中搜索指定的字元,返回發現指定的字元的位置; C1 被搜尋的字串 C2 希望搜尋的字串 I 搜尋的開始位置,預設為1 J 出現的位置,預設為1 S

Oracledecode函式和sign函式用法

資料庫表結構如下: 流程控制函式 DECODE decode()函式簡介: 主要作用: 將查詢結果翻譯成其他值(即以其他形式表現出來,以下舉例說明); 使用方法: Select decode(columnname,值1,翻譯值1,值2,翻譯值2,…值n,翻譯值n,預

關於Oracledecode函式用法

        相信有過Oracle程式設計基礎的人都應該接觸過decode這一函式,沒有接觸過的也沒有關係,接下來我簡單的介紹下關於decode函式的用法,首先decode是Oracle的一個內建函式,典型的SQL語句如下: select decode(a,1,'cc',

oraclesubstr函式用法(sqlserver right)

 oracle: 語法: substr(string,a,b): a:從第幾位開始,第一位a=1,倒數第三位(即sqlserver中的right)a=-3 b:取幾個字元  substr('This is a test', 6, 2) would return 'i

oraclesubstr()函式和instr()函式用法

1. substr()函式和instr()函式 表中一個欄位中存了多個值,每個值用逗號分隔,如:‘1,2’代表‘紅,黃’,‘5,10’代表‘黑,白’ --擷取逗號前的值 substr(a.str, 0, instr(a.str, ',')-1) --擷取逗號後的值 sub

oracleto_number()、LPAD()、NVL()函式的使用

1、to_number(Str)主要是實現將數字字串轉化為數字,轉化可以進行運算子操作 to_number("123456")可以變成整數123456 2、NVL(arg,vlaue) 如果arg是null值,則返回value的值 如果arg不是null值就返回本身的值 3

OracleMerge into用法總結 (轉載)

字符 存在 sin 刪除 ron mic 但是 多個 前段時間 Oracle中Merge into用法總結 (出處:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因:   前段時間,因為涉及到一張表的大數據操作,要同時

sql語句EXISTS的用法oraclesubstr的用法

參數 ... ble 索引 效率 put www 長度 重復記錄 轉需:EXISTS 指定一個子查詢,檢測 行 的存在。語法: EXISTS subquery參數: subquery 是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關鍵字)。

【基礎】ORACLEsubstr的用法

itl .cn 字符串 ref art from 基礎 htm bst ORACLE中substr函數的簡單用法 substr(字符串,截取開始位置,截取長度) //返回截取的字 substr(‘Hello World‘,0,1) //返回結果為 ‘H‘ *從字符串第一

ORACLE TRANSLATE的用法

spa sele select abcde ora 保留 用法 ans class --TRANSLATE(string,from_str,to_str) --to_str和from_str中的字符一一對應 --如果string裏有,from_str字符集裏沒有的字符,

Oraclewith as用法

分組 關鍵字 視圖 group 高效 這也 過程 avi 臨時 with as 相當於虛擬視圖。 例子:需求描述 按照x列分組後統計y列的總值,最終目標是選出比y列總值的三分之一大的那些分組統計信息 使用子查詢方式實現最容易想到的方法 SELECT x, SUM (y)