orcale中的to_number方法使用
TO_NUMBER函數(shù)()是Oracle中常用的類型轉(zhuǎn)換函數(shù)之一,主要是將字符串轉(zhuǎn)換為數(shù)值型的格式,與TO_CHAR()函數(shù)的作用正好相反。
To_number函數(shù)的格式如下:
To_number(varchar2 or char,'format model')
To_number函數(shù)中也有很多預定義的固定格式:
格式值 | 含義 |
---|---|
9 | 代表一個數(shù)字 |
0 | 強迫0顯示 |
$ | 顯示美元符號 |
L | 強制顯示一個當?shù)氐呢泿欧?/td> |
. | 顯示一個小數(shù)點 |
, | 顯示一個千位分隔符號 |
TO_NUMBER用法 將一個字符串轉(zhuǎn)成數(shù)值
格式:TO_NUMBER(string,format) 即 TO_NUMBER(字符串,格式)
在“轉(zhuǎn)換函數(shù):TO_CHAR()用法之一 將一個數(shù)值轉(zhuǎn)化成字符串 ”一文中 TO_CHAR 函數(shù)所用格式,都適合本函數(shù)。
例:
TO_NUMBER('123.45')
結(jié)果
123.45
TO_NUMBER('$123,456.78','$999,999.99')
結(jié)果
123,456.78
Oracle中to_number()函數(shù)的學習
1、
Converts a string to the NUMBER data type(將字符串轉(zhuǎn)換為數(shù)字數(shù)據(jù)類型) TO_NUMBER(<value>[, <format>, <NLS parameter>]) RETURN NUMBER select to_number('00001228') from dual;--to_number('00001228') 1228 select trunc(to_number('123.123'),2) from dual;
結(jié)果為:123.12
2、
Converts a HEX number to FLOAT(轉(zhuǎn)換一個十六進制數(shù)的浮標) TO_NUMBER(<value>, <format>); SELECT TO_NUMBER('0A', 'XX') FROM dual;
結(jié)果為:10
3、
Converts a HEX number to DECIMAL(一個十六進制數(shù)轉(zhuǎn)換為十進制) TO_NUMBER(<binary_float | binary_double | number>, '<hex mask>') RETURN <binary_float | binary_double | number>; SELECT TO_NUMBER(100000,'XXXXXXXX') FROM dual;
結(jié)果為:1048576
4、
--to_number(expr) --to_number(expr,format) --to_number(expr,format,'nls-param') select to_number('0123')number1, --converts a string to number trunc(to_number('0123.123'),2) number2, to_number('120.11','999.99') number3, to_number('0a','xx') number4, --converts a hex number to decimal to_number(100000,'xxxxxx') number5 from dual;
補充:oracle中to_number字符串轉(zhuǎn)數(shù)字、max取最大值、dbms_random.value生成隨機數(shù)及對小數(shù)做截取,四舍五入操作的函數(shù)
oracle中to_number、max、dbms_random.value、trunc、round函數(shù)的用法及生成隨機整數(shù)的實現(xiàn)方式。
1、 to_number函數(shù)很簡單,就是把字符類型轉(zhuǎn)換成數(shù)字類型。
select to_number('123.8') from dual;
select to_number('123') from dual
2、max函數(shù)很簡單,從結(jié)果集中取出最大值。下圖為基礎(chǔ)數(shù)據(jù)。在此基礎(chǔ)上應(yīng)用max函數(shù)。
3、dbms_random.value(a,b)函數(shù)可生成隨機浮點數(shù)。
a指下限,b指上限,將會生成下限到上限之間的數(shù)字,但不包含上限,即生成的小數(shù)在[a,b)區(qū)間。
4、trunc(3.141592,4)保留小數(shù)到小數(shù)點后4位,不做四舍五入操作。
若第二個參數(shù)不傳,默認保留整數(shù)。
5、round(3.141592,4)四舍五入到小數(shù)點后4位。
同樣,若第二個參數(shù)不傳,默認四舍五入到整數(shù)。
6、隨機生成[1,7]之間的整數(shù), dbms_random.value結(jié)合round或者trunc實現(xiàn)。
但是用select round(dbms_random.value(1,7)) from dual隨機生成[1,7]之間的隨機數(shù)是不科學的
以隨機生成[1,4]之間的隨機數(shù)為例,若是這么寫select round(dbms_random.value(1,4)) from dual
當dbms_random.value(1,4)生成的隨機數(shù)在1~1.5之間時round(dbms_random.value(1,4))值為1
當dbms_random.value(1,4)生成的隨機數(shù)在1.5~2.5之間時round(dbms_random.value(1,4))值為2
當dbms_random.value(1,4)生成的隨機數(shù)在2.5~3.5之間時round(dbms_random.value(1,4))值為3
當dbms_random.value(1,4)生成的隨機數(shù)在3.5~4之間時round(dbms_random.value(1,4))值為4
可見生成1和4的概率為1/6,生成2和3的概率為2/6,所以也就談不上隨機生成了。
可改成select round(dbms_random.value(0.5,4.5)) from dual,這樣生成每一個數(shù)的概率就相同了。
用round和trunc函數(shù)結(jié)合dbms_random.value生成隨機數(shù)時一定注意這一點。
建議這種情況直接用trunc,簡單粗暴。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
ORA-01578、ORA-01110:數(shù)據(jù)塊被損壞,此時無法讀取文件問題修復方案
這篇文章主要給大家介紹了關(guān)于ORA-01578、ORA-01110:數(shù)據(jù)塊被損壞,此時無法讀取文件問題的修復方案,文中通過示例代碼介紹的非常詳細,對大家學習或者使用數(shù)據(jù)庫具有一定的參考學習價值,需要的朋友可以參考下2024-03-03oracle數(shù)據(jù)庫刪除數(shù)據(jù)Delete語句和Truncate語句的使用比較
oracle當表中的數(shù)據(jù)不需要時,則應(yīng)該刪除該數(shù)據(jù)并釋放所占用的空間,刪除表中的數(shù)據(jù)可以使用Delete語句或者Truncate語句,下面分別介紹2012-09-09Oracle 解決ORA-00257 Archiver error 報錯問題解決
訂單投資交易環(huán)境進行 impdb 數(shù)據(jù)泵恢復數(shù)據(jù),執(zhí)行到一半,報錯終止,歸檔策略保留時間較長,或歸檔頻率過高,導致數(shù)據(jù)庫掛載盤符空間不足,本文給大家分享Oracle 解決ORA-00257 Archiver error 報錯問題解決,感興趣的朋友一起看看吧2023-12-12Oracle刪除重復的數(shù)據(jù),Oracle數(shù)據(jù)去重復
這篇文章主要介紹了Oracle刪除重復的數(shù)據(jù),Oracle數(shù)據(jù)去重復,需要的朋友可以參考下2016-08-08oracle11g管理員密碼忘記怎么辦 sqlplus解決忘記密碼問題
oracle11g管理員密碼忘記了怎么辦?這篇文章主要介紹了oracle 11g管理員密碼忘記問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06一些Oracle數(shù)據(jù)庫中的查詢優(yōu)化建議綜合
這篇文章主要介紹了一些Oracle數(shù)據(jù)庫中的查詢優(yōu)化建議綜合,包括in和not in的使用等一些細節(jié)上的使用建議,需要的朋友可以參考下2016-01-01