【原創】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函式
- oracle function函式castOracleFunction函式AST
- cast函式的用法案例AST函式
- Oracle CAST函式不生效OracleAST函式
- MySQL CAST與CONVERT 函式的用法MySqlAST函式
- Oracle中CAST函式使用簡介OracleAST函式
- 原創:oracle聚合函式介紹Oracle函式
- 【原創】SYS_CONTEXT函式的用法Context函式
- SQL Server 2016 函式:CASTSQLServer函式AST
- 【原創】淺談指標(十一)alloca函式指標函式
- SQL Server COALESCE()函式的創新應用SQLServer函式
- 【原創】使用Oracle分析函式去除重複記錄Oracle函式
- 關於Python中函式過載問題的思考(原創)Python函式
- 【原創】淺談指標(八)字串相關函式(下集)指標字串函式
- [原創]簡單演算法――函式影像大師V 4.5演算法函式
- oracle函式大全-字串處理函式Oracle函式字串
- C/C++中的new/delete、構造/解構函式、dynamic_cast分析C++delete函式AST
- gethostbyname函式和getservbyname函式的應用函式
- 磁碟處理函式函式
- 字元處理函式字元函式
- 原來結構體函式還能這樣用結構體函式
- 用CLR函式把HTMLCode轉換為原字元函式HTML字元
- PHP函式處理函式例項詳解PHP函式
- 損失函式+啟用函式函式
- python匿名函式的好處Python函式
- 處理中英文的函式函式
- Vue函式式元件的應用Vue函式元件
- Go 錯誤處理新思路?用左側函式和表示式Go函式
- 啟用函式的作用函式
- [原創]一次美麗的誤會引發對函式呼叫保護的思考函式
- Excel函式應用教程:函式的引數(轉)Excel函式
- 陣列處理函式陣列函式
- SqlServer——字串處理函式SQLServer字串函式
- Oracle函式-->字元處理Oracle函式字元
- 安全字串處理函式字串函式
- 檔案處理函式函式
- 時間處理函式函式
- 【原創】Oracle RAC故障分析與處理Oracle