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ù)中也有很多預(yù)定義的固定格式:
| 格式值 | 含義 |
|---|---|
| 9 | 代表一個(gè)數(shù)字 |
| 0 | 強(qiáng)迫0顯示 |
| $ | 顯示美元符號(hào) |
| L | 強(qiáng)制顯示一個(gè)當(dāng)?shù)氐呢泿欧?hào) |
| . | 顯示一個(gè)小數(shù)點(diǎn) |
| , | 顯示一個(gè)千位分隔符號(hào) |
TO_NUMBER用法 將一個(gè)字符串轉(zhuǎn)成數(shù)值
格式:TO_NUMBER(string,format) 即 TO_NUMBER(字符串,格式)
在“轉(zhuǎn)換函數(shù):TO_CHAR()用法之一 將一個(gè)數(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ù)的學(xué)習(xí)
1、
Converts a string to the NUMBER data type(將字符串轉(zhuǎn)換為數(shù)字?jǐn)?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)換一個(gè)十六進(jìn)制數(shù)的浮標(biāo))
TO_NUMBER(<value>, <format>);
SELECT TO_NUMBER('0A', 'XX')
FROM dual;
結(jié)果為:10
3、
Converts a HEX number to DECIMAL(一個(gè)十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jì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;

補(bǔ)充:oracle中to_number字符串轉(zhuǎn)數(shù)字、max取最大值、dbms_random.value生成隨機(jī)數(shù)及對(duì)小數(shù)做截取,四舍五入操作的函數(shù)
oracle中to_number、max、dbms_random.value、trunc、round函數(shù)的用法及生成隨機(jī)整數(shù)的實(shí)現(xiàn)方式。
1、 to_number函數(shù)很簡(jiǎn)單,就是把字符類型轉(zhuǎn)換成數(shù)字類型。
select to_number('123.8') from dual;
select to_number('123') from dual
2、max函數(shù)很簡(jiǎn)單,從結(jié)果集中取出最大值。下圖為基礎(chǔ)數(shù)據(jù)。在此基礎(chǔ)上應(yīng)用max函數(shù)。


3、dbms_random.value(a,b)函數(shù)可生成隨機(jī)浮點(diǎn)數(shù)。
a指下限,b指上限,將會(huì)生成下限到上限之間的數(shù)字,但不包含上限,即生成的小數(shù)在[a,b)區(qū)間。

4、trunc(3.141592,4)保留小數(shù)到小數(shù)點(diǎn)后4位,不做四舍五入操作。
若第二個(gè)參數(shù)不傳,默認(rèn)保留整數(shù)。


5、round(3.141592,4)四舍五入到小數(shù)點(diǎn)后4位。
同樣,若第二個(gè)參數(shù)不傳,默認(rèn)四舍五入到整數(shù)。


6、隨機(jī)生成[1,7]之間的整數(shù), dbms_random.value結(jié)合round或者trunc實(shí)現(xiàn)。


但是用select round(dbms_random.value(1,7)) from dual隨機(jī)生成[1,7]之間的隨機(jī)數(shù)是不科學(xué)的
以隨機(jī)生成[1,4]之間的隨機(jī)數(shù)為例,若是這么寫(xiě)select round(dbms_random.value(1,4)) from dual
當(dāng)dbms_random.value(1,4)生成的隨機(jī)數(shù)在1~1.5之間時(shí)round(dbms_random.value(1,4))值為1
當(dāng)dbms_random.value(1,4)生成的隨機(jī)數(shù)在1.5~2.5之間時(shí)round(dbms_random.value(1,4))值為2
當(dāng)dbms_random.value(1,4)生成的隨機(jī)數(shù)在2.5~3.5之間時(shí)round(dbms_random.value(1,4))值為3
當(dāng)dbms_random.value(1,4)生成的隨機(jī)數(shù)在3.5~4之間時(shí)round(dbms_random.value(1,4))值為4
可見(jiàn)生成1和4的概率為1/6,生成2和3的概率為2/6,所以也就談不上隨機(jī)生成了。
可改成select round(dbms_random.value(0.5,4.5)) from dual,這樣生成每一個(gè)數(shù)的概率就相同了。
用round和trunc函數(shù)結(jié)合dbms_random.value生成隨機(jī)數(shù)時(shí)一定注意這一點(diǎn)。
建議這種情況直接用trunc,簡(jiǎn)單粗暴。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
oracle—SQL技巧之(二)WMSYS.WM_CONCAT函數(shù)實(shí)現(xiàn)多行記錄用逗號(hào)拼接在一起
由于業(yè)務(wù)系統(tǒng)的交易記錄有很多,常常有些主管需要看到所有的記錄情況;又不想滾動(dòng);接下來(lái)介紹使用Oracle自帶的函數(shù) WMSYS.WM_CONCAT,進(jìn)行拼接,感興趣的朋友可以了解下2013-01-01
Oracle將查詢的結(jié)果放入一張自定義表中并再查詢數(shù)據(jù)
可以將查詢的結(jié)果放入到一張自定義表中,同時(shí)可以再?gòu)倪@個(gè)自定義的表中查詢數(shù)據(jù),詳細(xì)的sql如下,感興趣的朋友不要錯(cuò)過(guò)2014-08-08
Oracle刪除當(dāng)前用戶下所有表的方法適用于有或沒(méi)有刪除權(quán)限
如果有plsql客戶端,則可以使用該用戶登錄,選中所有表 右鍵Drop即可,如果有或沒(méi)有刪除用戶的權(quán)限都可以使用下面的方法2014-06-06
Oracle捕獲問(wèn)題SQL解決CPU過(guò)渡消耗
本文通過(guò)實(shí)際業(yè)務(wù)系統(tǒng)中調(diào)整的一個(gè)案例,試圖給出一個(gè)常見(jiàn)CPU消耗問(wèn)題的一個(gè)診斷方法.2007-03-03

