看完这章你会学习到以下内容:
1.隐式转换的意思
2.有多少种情况
3.它们之间的逻辑,优先次序


简单总结:

  1. 比较时,一般是字符型转换为数值型,字符型转换为日期型
  2. 算术运算时,一般把字符型转换为数值型,字符型转换为日期型
  3. 连接时(||),一般是把数值型转换为字符型,日期型转换为字符型
  4. 赋值、调用函数时,以定义的变量类型为准。

我的理解:
有三种最基本的数据类型,即是字符型、数值型、日期型。
同时提供类型转换函数To_Char,To_Number,To_Date。当书写SQL语句时,数据库会根据原字段类型进行判断,背后用以上三种函数进行转换


例子:
1)字符转数字,数字转字符
对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。如假设id列的数据类型为varchar2

 select * from t where id=1; 
-> select * from t where id = to_char(1);

但如果id列的数据类型为number,则

 select * from t where id='1'; 
-> select * from t where id=to_number('1');

2)字符转日期
当比较字符型和日期型的数据时,oracle会把字符型转换为日期型。
假设create_date为字符型

 select * from t where create_date>sysdate; 
-> select * from t where to_date(create_date)>sysdate;

3)用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型。

select 1||'2' from dual; 
-> select to_char(1)||'2' from dual;

4)如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,oracle会将她们都转换为number类型的数据再做比较。


蜗牛
27 声望13 粉丝