【原創】cast() 函式的用處
大家知道從number、char、date型別之間有to_number、to_char、to_date函式進行型別轉換。但是如何進行number、binary_float、binary_double型別之間的轉換?或number型別如何轉換精度、有效值?這就需要用到cast函式
cast的函式主要有下面兩個作用:
1、純格式轉換
number、binary_float、binary_double型別之間的轉換:
sys@T>select a from t1;
A
----------------------
123567890.1234567890
sys@T>select cast(a as binary_float) from t1;
CAST(AASBINARY_FLOAT)
---------------------
1.236E+008
sys@T>select cast(a as binary_double) from t1;
CAST(AASBINARY_DOUBLE)
----------------------
1.236E+008
sys@T>select dump(a) from t1;
DUMP(A)
-------------------------------------------------------
Typ=2 Len=11: 197,2,24,57,79,91,13,35,57,79,91
sys@T>select dump(cast(a as binary_float)) from t1;
DUMP(CAST(AASBINARY_FLOAT))
-------------------------------------------------------
Typ=100 Len=4: 204,235,175,226
sys@T>select dump(cast(a as binary_double)) from t1;
DUMP(CAST(AASBINARY_DOUBLE))
-------------------------------------------------------
Typ=101 Len=8: 193,157,117,252,72,126,107,117
number型別精度、有效值的轉換:
sys@T>select a from t1;
A
----------------------
123567890.1234567890
sys@T>select cast(a as number(10)) from t1;
CAST(AASNUMBER(10))
-------------------
123567890
sys@T>select dump(a) from t1;
DUMP(A)
-------------------------------------------------------
Typ=2 Len=11: 197,2,24,57,79,91,13,35,57,79,91
sys@T>select dump(cast(a as number(10))) from t1;
DUMP(CAST(AASNUMBER(10)))
-------------------------------------------------------
Typ=2 Len=6: 197,2,24,57,79,91
2、提高效能
Oracle對於number的運算是在軟體中模擬的,而對於binary_float、binary_double這種浮點數是使用硬體執行計算的。對於複雜的數學函式,使用number和使用浮點數的效能現比就會有比較大的差距。所以可以在對number計算時,將其轉換為浮點數進行運算。
sys@T>insert into t1 select level from dual connect by level<=100000;
在tkprof中可以看到number型別使用的CPU時間是binary_float的10倍:
select ln(a) from t1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 6668 3.85 3.89 0 6823 0 100000
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 6670 3.85 3.89 0 6824 0 100000
select ln(cast(a as binary_float)) from t1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.01 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 6668 0.40 0.37 0 6823 0 100000
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 6670 0.40 0.39 0 6824 0 100000
但是,使用這種方法一定要小心精度的損失
sys@T>insert into t1 values(123567890.1234567890);
1 row created.
sys@T>select ln(a) from t1;
LN(A)
----------
18.6323013
sys@T>select ln(cast(a as binary_float)) from t1;
LN(CAST(AASBINARY_FLOAT))
-------------------------
1.863E+001
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/498744/viewspace-328471/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL中的cast()函式SQLAST函式
- SQL Server 2016 函式:CASTSQLServer函式AST
- 原創:oracle聚合函式介紹Oracle函式
- 【原創】淺談指標(十一)alloca函式指標函式
- C/C++中的new/delete、構造/解構函式、dynamic_cast分析C++delete函式AST
- 【原創】淺談指標(八)字串相關函式(下集)指標字串函式
- python匿名函式的好處Python函式
- Vue函式式元件的應用Vue函式元件
- 啟用函式的作用函式
- Go 錯誤處理新思路?用左側函式和表示式Go函式
- 陣列處理函式陣列函式
- reinterpret_cast 和 static_cast 的區別AST
- JavaScript 非同步函式的 Promisification 處理JavaScript非同步函式
- js柯里化函式的好處JS函式
- [原創]一次美麗的誤會引發對函式呼叫保護的思考函式
- 尤拉函式的應用函式
- C++強制型別轉換:static_cast、dynamic_cast、const_cast、reinterpret_castC++型別AST
- flask 工廠函式啟動的好處Flask函式
- SQL中的常用的字串處理函式大全SQL字串函式
- 函式柯里化和偏函式應用函式
- 開發中遇到的jquery函式應用和表單驗證處理jQuery函式
- 常用啟用函式函式
- 7.41 CASTAST
- mysql中的if函式怎麼用MySql函式
- python的upper函式怎麼用Python函式
- day10-函式的應用函式
- 科技愛好者週刊(第 129 期):創業的凸函式和凹函式創業函式
- echarts 繫結事件處理函式Echarts事件函式
- C語言之字串處理函式C語言字串函式
- Sanic 處理函式修飾器函式
- mongoDB中聚合函式java處理MongoDB函式Java
- JavaScript 註冊事件處理函式JavaScript事件函式
- [譯] 編寫函式式的 JavaScript 實用指南函式JavaScript
- mListView.setOnItemClickListener的函式失效的處理辦法。View函式
- c語言是如何處理函式呼叫的?C語言函式
- Pandas 基礎 (6) - 用 replace () 函式處理不合理資料函式
- Java 函式式介面 lamada 應用Java函式
- 人工智慧---神經網路啟用函式恆等函式、sigmoid函式、softmax函式詳解人工智慧神經網路函式Sigmoid
- main函式的入口函式AI函式