在赋值语句中数据类型会隐式转换,隐式转换应当尽量避免,因为写出来的SQL难理解,随着时间流逝自己都很难理解。特别是嵌入到大型程序中时,另外,oracle升级会修改隐式转换的规则,这会使程序移植遇到问题。尤其是索引列不能使用隐式转换,这样就不走索引。
表达式中oracle的自动转换规则:
转换成功的条件:
----拿字符和数字比较 oracle自动将字符串转成了数字 SQL> select ename,sal from emp where sal > ‘4000‘; ENAME SAL ---------- ---------- KING 5000 ----拿字符串充当日期 oracle自动将字符串转成了日期 SQL> select ename,hiredate from emp where hiredate = ‘17-NOV-81‘; ENAME HIREDATE ---------- ------------------ KING 17-NOV-81
----将日期型转换成了字符型 SQL> select ename,to_char(hiredate,‘YYYY-MM-DD‘) from emp where ename=‘SCOTT‘; ENAME TO_CHAR(HI ---------- ---------- SCOTT 1987-04-19
SQL> select to_char(sal*12,‘$99,999.99‘) from emp where ename =‘SCOTT‘; TO_CHAR(SAL ----------- $36,000.00 SQL> select to_char(sal*12,‘L99,999.00‘,‘NLS_CURRENCY=RMB‘) from emp where ename =‘SCOTT‘; TO_CHAR(SAL*12,L99, -------------------- RMB36,000.00 SQL> select to_char(sal*12,‘L99,999.00‘,‘NLS_CURRENCY=¥‘) from emp where ename =‘SCOTT‘; TO_CHAR(SAL*12,L99, -------------------- ¥36,000.00
to_char 还可以将10进制数转换成16进制数
SQL> select to_char(10,‘xxxx‘) from dual; TO_CH ----- a
SQL> select to_number(‘678.88‘,‘9999999.99‘) from dual; TO_NUMBER(‘678.88‘,‘9999999.99‘) -------------------------------- 678.88
to_number 也可以将16进制转换成10进制
SQL> select to_number(‘a‘,‘xxxx‘) from dual; TO_NUMBER(‘A‘,‘XXXX‘) --------------------- 10
hiredate = to_date(‘2010-10-10‘,‘YYYY‘) SQL> select to_DATE(‘2010-10-10 20:44:37‘,‘YYYY-MM-DD HH24:MI:SS‘) from dual; TO_DATE(2010-10-10 ------------------- 2010-10-10 20:44:37
原文:https://www.cnblogs.com/marxist/p/11717138.html