看完这章你会学习到以下内容:
1.隐式转换的意思
2.有多少种情况
3.它们之间的逻辑,优先次序
简单总结:
- 比较时,一般是字符型转换为数值型,字符型转换为日期型
- 算术运算时,一般把字符型转换为数值型,字符型转换为日期型
- 连接时(||),一般是把数值型转换为字符型,日期型转换为字符型
- 赋值、调用函数时,以定义的变量类型为准。
我的理解:
有三种最基本的数据类型,即是字符型、数值型、日期型。
同时提供类型转换函数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类型的数据再做比较。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。