oracle可以在的不同的数据类型之间完成转换,可以使用隐式转换和显示转换。
select * from emp where hiredate='17-11月-8'; --隐式转换 select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual; --使用to_char函数进行显示转换
如果隐式转换和显示转换都可以使用,应该首选哪个呢?
※SQL优化:如果隐式、显示都可以使用,应该首选显示,可以省去Oracle的解析过程。
自动转换,前提条件是:被转换的对象是可以转换的。 (ABC→625 可以吗?) 【PPT】 24
显示转换: to_char(数据,格式) to_number to_date
to_char函数
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss "今天是" day') from dual; --在固定的格式里加入自定义的格式,是可以的,必须要加“”。
在屏幕上显示:2015-05-11 16:17:06 今天是 星期一
to_date函数
反向操作:已知字符串“2015-05-11 15:17:06 今天是 星期一”转化成日期
select to_date('2015-05-11 15:17:06 今天是 星期一', 'yyyy-mm-dd hh24:mi:ss "今天是" day') from dual;
to_number函数
将¥2,975.00转化成数字
select to_number('¥2,975.00', 'L9,999.99') 转成数字 from dua;
通用函数
通用函数适用于任何数据类型,包括NULL空值
nvl2: 是nvl函数的增强版。
nvl2(a, b, c) 当a = null 返回 c, 否则返回b
使用nvl2求员工的年收入:
select empno, ename, sal, sal*12, sal * 12 + nvl2(comm, comm, 0) 年薪 from emp;
nullif: nullif(a, b) 当 a = b 时返回null, 不相等的时候返回a值。
select nullif('L9,999.99', 'L9,999.99') from dual;
coalesce: coalesce(a, b, c, …, n) 从左向右找参数中第一个不为空的值。
select comm, sal, coalesce(comm, sal) 结果值 from emp;