oracle資料隱式轉換規則
在oracle中,如果不同的資料型別之間關聯,如果不顯式轉換資料,則它會根據以下規則對資料進行隱式轉換
The following rules govern the direction in which Oracle makes implicit datatype conversions:
1) During INSERT and UPDATE operations, Oracle converts the value to the datatype of the affected column.
對於INSERT和UPDATE操作,oracle會把插入值或者更新值隱式轉換為欄位的資料型別。如
假如id列的資料型別為number
update t set id='1'; -> 相當於 update t set id=to_number('1');
insert into t(id) values('1') -> insert into t values(to_number('1'));
2) During SELECT FROM operations, Oracle converts the data from the column to the type of the target variable.
對於SELECT語句,oracle會把欄位的資料型別隱式轉換為變數的資料型別。如
假設id列的資料型別為varchar2
select * from t where id=1; -> select * from t where to_number(id)=1;
但如果id列的資料型別為number,則
select * from t where id='1'; -> select * from t where id=to_number('1');(參考下文)
3) When comparing a character value with a NUMBER value, Oracle converts the character data to NUMBER.
當比較一個字元型和數值型的值時,oracle會把字元型的值隱式轉換為數值型。如
假設id列的資料型別為number
select * from t where id='1'; -> select * from t where id=to_number('1');
4) When comparing a character value with a DATE value, Oracle converts the character data to DATE.
當比較字元型和日期型的資料時,oracle會把字元型轉換為日期型。如
假設create_date為字元型,
select * from t where create_date>sysdate; -> select * from t where to_date(create_date)>sysdate;(注意,此時session的nls_date_format需要與字串格式相符)
假設create_date為date型,
select * from t where create_date>'2006-11-11 11:11:11'; -> select * from t where create_date>to_date('2006-11-11 11:11:11'); (注意,此時session的nls_date_format需要與字串格式相符)
5) When you use a SQL function or operator with an argument of a datatype other than the one it accepts,
Oracle converts the argument to the accepted datatype.
如果呼叫函式或過程等時,如果輸入引數的資料型別與函式或者過程定義的引數資料型別不一直,則oracle會把輸入引數的資料型別轉換為函式或者過程定義的資料型別。如
假設過程如下定義
p(p_1 number)
exec p('1'); -> exec p(to_number('1'));
6) When making assignments, Oracle converts the value on the right side of the equal sign (=) to the datatype of the target of the assignment on the left side.
賦值時,oracle會把等號右邊的資料型別轉換為左邊的資料型別。如
var a number
a:='1'; - > a:=to_number('1');
7) During concatenation operations, Oracle converts from noncharacter datatypes to CHAR or NCHAR.
用連線運算子(||)時,oracle會把非字元型別的資料轉換為字元型別。
select 1||'2' from dual; -> select to_char(1)||'2' from dual;
8) During arithmetic operations on and comparisons between character and noncharacter datatypes,
Oracle converts from any character datatype to a number, date, or rowid, as appropriate.
In arithmetic operations between CHAR/VARCHAR2 and NCHAR/NVARCHAR2, Oracle converts to a number.
如果字元型別的資料和非字元型別的資料(如number、date、rowid等)作算術運算,則oracle會將字元型別的資料轉換為合適的資料型別,這些資料型別可能是number、date、rowid等。
如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之間作算術運算,則oracle會將她們都轉換為number型別的資料再做比較。
9) Comparisons between CHAR/VARCHAR2 and NCHAR/NVARCHAR2 types may entail different character sets.
The default direction of conversion in such cases is from the database character set to the national character set.
比較CHAR/VARCHAR2 和NCHAR/NVARCHAR2時,如果兩者字符集不一樣,則預設的轉換方式是將資料編碼從資料庫字符集轉換為國家字符集。
簡單總結:
比較時,一般是字元型轉換為數值型,字元型轉換為日期型
算術運算時,一般把字元型轉換為數值型,字元型轉換為日期型
連線時(||),一般是把數值型轉換為字元型,日期型轉換為字元型
賦值、呼叫函式時,以定義的變數型別為準。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63725/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JS資料型別轉換規則JS資料型別
- JavaScript 隱式資料型別轉換JavaScript資料型別
- Java資料型別的顯式轉換和隱式轉換Java資料型別
- js顯式轉換和隱式轉換JS
- Oracle vs PostgreSQL,研發注意事項(10)- PostgreSQL資料型別轉換規則#2OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(11)- PostgreSQL資料型別轉換規則#3OracleSQL資料型別
- Oracle vs PostgreSQL,研發注意事項(9)- PostgreSQL資料型別轉換規則#1OracleSQL資料型別
- java隱式轉換Java
- javascript 隱式轉換JavaScript
- sql隱式轉換SQL
- 資料型別隱式轉換導致的阻塞資料型別
- Scala Essentials: 隱式轉換
- [20191106]隱式轉換.txt
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- oracle執行計劃------未走索引,隱式轉換的坑Oracle索引
- JavaScript隱式型別轉換JavaScript型別
- 【C++】禁止隱式轉換C++
- mysql隱式轉換問題MySql
- 好程式設計師大資料教程Scala系列之隱式轉換和隱式引數程式設計師大資料
- JS隱式轉換--寬鬆相等(==)JS
- [] == ![],走進==隱式轉換的世界
- MySQL索引失效之隱式轉換MySql索引
- Oracle資料庫日期格式轉換操作Oracle資料庫
- Oracle DG資料庫狀態轉換Oracle資料庫
- java 基本型別的轉換規則Java型別
- Oracle OCP(05):轉換函式Oracle函式
- Oracle like、不等於、隱式轉換走索引與不走索引情況Oracle索引
- Solidity語言學習筆記————11、隱式轉換和顯式轉換Solid筆記
- ? 圖解 == 操作符規則和不同型別間轉換規則圖解型別
- Spark中的三種隱式轉換Spark
- 如何實現隱式型別轉換型別
- Oracle vs PostgreSQL,研發注意事項(8)- Oracle資料比較規則OracleSQL
- C語言的隱式型別轉換C語言型別
- 【關於Javascript】--- 隱式型別轉換篇JavaScript型別
- [20220811]奇怪的隱式轉換問題.txt
- oracle undo分配規則Oracle
- 建構函式定義的隱式型別轉換函式型別
- Cris 的 Scala 筆記整理(十):隱式轉換筆記