当前位置: 首页 > 科技观察

Oracle中三大类型及隐式数据类型转换详解

时间:2023-03-12 12:03:54 科技观察

在某些情况下,OracleServer会接收到与预期数据类型不同的数据。发生这种情况时,OracleServer可以自动将数据转换为预期的数据类型。这种数据类型转换可以由OracleServer隐式完成,也可以由用户显式完成。在MySQL和Oracle中,如果存在隐式数据类型转换,可能会导致无法命中索引,从而进行全表扫描。1、类型转换规则MySQL类型转换规则:当两个参数中至少有一个为NULL时,比较的结果也为NULL。例外的是当使用<=>比较两个NULL时,会返回1,这两种情况都不需要如果进行类型转换,两个参数都是字符串,会按照字符串进行比较。如果不进行类型转换,则两个参数都是整数,将按整数进行比较。当不进行类型转换时,十六进制值与非数字比较,将被视为二进制字符串。一个参数是TIMESTAMP或DATETIME,另一个参数是一个常量,会被转换成时间戳。在其他情况下,这两个参数将转换为浮点数进行比较。Oracle类型转换规则:对于插入和更新操作,Oracle将值转换为受影响的列的类型。对于SELECT操作,oracle会将列值的类型转换为目标变量的类型。2、Oracle中的三大类型及隐式数据类型转换varchar2变长/char定长-->number,例如:'123'->123varchar2/char-->date,例如:'25-April-15'->'25-April-15'数字---->varchar2/char,例如:123->'123'日期------>varchar2/char,例如:'25-April-15'->'25-April-15'3.Oracle/MySQL如何隐式转换=号两侧的类型?,否则转换失败,例如:12月将没有32天,一年中将没有12月。4.Oracle隐式转换示例(1)查询1980年12月17日入职的员工(方法一:日期隐式表达式转换)select*fromempwherehiredate='17-December-80';(2)使用to_char(date,'cell"常量"公式')函数将日期转换成字符串)selectto_char(sysdate,'yyyy"year"mm"month"dd"day"day')fromdual;(3)使用to_char(date,'format')函数将日期转换成字符串)selectto_char(sysdate,'yyyy-mm-dd"todayis"dayhh24:mi:ss')fromdual;orselectto_char(sysdate,'yyyy-mm-dd"todayis"dayHH12:MI:SSAM')fromdual;(4)使用to_char(value,'format')函数将值转换为字符串selectto_char(1234,'$9,999')fromdual;selectto_char(1234,'L9,999')fromdual;(5)使用to_date('string','format')函数查询1980年12月17日入职的员工(方法二:dateexplicitconversion)select*fromempwherehiredate=to_date('1980年12月17日','yyyy"年"mm"月"dd"日"');或者选择*fromempwherehiredate=to_date('1980#12#17','yyyy"#"mm"#"dd');或者select*fromempwherehiredate=to_date('1980-12-17','yyyy-mm-dd');(6)使用to_number('string')函数将字符串'123'转换为数字123selectto_number('123')来自双重;注:select'123'+123fromdual;246select'123'||123fromdual;123123