PS:在oracle中做的测试
一、to_date(A,B)
以下内容中,to_date可以替换成to_timstamp,只有在第一个小测试中报错内容不一样
- A有带连接符,b不带:一定报错
select to_date('2012-03-11','yyyymmdd') from dual /*ORA-01843: 无效的月份*/
select to_date('2012.03.11','yyyymmdd') from dual
/*
用to_date报错:ORA-01858: 在要求输入数字处找到非数字字符
用to_timestamp报错:ORA-01843: 无效的月份
*/
- AB都不带连接符:A必须一一对应
select to_date('20120311','yyyymmdd') from dual
select to_date('2012311','yyyymmdd') from dual /*ORA-01843: 无效的月份*/
- A不带,B带
select to_date('20120311','yyyy-mm-dd') from dual
select to_date('20120311','yyyy.mm.dd') from dual
select to_date('20120311','yyyy mm dd') from dual
- AB都带:AB不对应好:即:07能对应mm,7也能对应mm
select to_date('2012-3-11','yyyy-mm-dd') from dual
select to_date('2012.3.11','yyyy mm dd') from dual
总结:
1.A有带连接符,B一定要有,随便是什么连接符。而且mm,dd不一定要对应位数。07可以对应mm,7同样可以对应mm。我们可以把空格理解为一个空的连接符。
2.不带连接符的必须一一位数对应,B带不带连接符均可。07可以匹配mm,但7就不可以匹配mm。
最终总结:
B一直需要带连接符,除非A是这样子:20170702。
二、to_char
1.日期转换 to_char(A,B)
select to_char(sysdate,'yyyy.mm.dd') from dual
总结:只要A是个日期型的,B中间加不加连接符,加什么连接符都可以(-, *)
2.处理数字
select to_char(12345) from dual
运行结果:12345
select to_char(12345678,'999,999,999,999') from dual
运行结果:12,345,678
3.进制转换:将10进制转换为16进制
select to_char(123,'xxx') from dual;
运行结果:4d2