Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
    转至
http://www.cnblogs.com/jiangchongwei/archive/2011/05/02/2034273.html
=============华丽的分割线===============
Oracle 中的 TO_DATE 和 TO_CHAR 函数
oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例
格式 说明 显示值 备注 
Year(年): 
yy two digits(两位年) 08   
yyy
three digits(三位年) 008   
yyyy four digits(四位年) 2008   
Month(月): 
mm number(两位月) 09   
mon abbreviated(字符集表示) 9月 若是英文版, 则显示 sep 
month spelled out(字符集表示) 9月 若是英文版, 则显示 september 
Day(日): 
dd number(当月第几天) 10   
ddd number(当年第几天) 254   
dy abbreviated(当周第几天简写) 星期三 若是英文版, 则显示 wed 
day spelled out(当周第几天全写) 星期三 若是英文版, 则显示 wednesday 
ddspth spelled out, ordinal twelfth tenth   
Hour(时): 
hh two digits(12小时进制) 11   
hh24 two digits(24小时进制) 23   
Minute(分): 
mi two digits(60进制) 45   
Second(秒): 
ss two digits(60进制) 56   
其他: 
Q digit(季度) 3   
WW digit(当年第几周) 37   
W digit(当月第几周) 2   
说明: 
12小时格式下时间范围为: 1:00:00 - 12:59:59(12 小时制下的 12:59:59 对应 24 小时制下的 00:59:59) 
24小时格式下时间范围为: 0:00:00 - 23:59:59
=============华丽的分割线===============
1. 日期和字符转换函数用法(to_date,to_char)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')    from dual//
2. select to_char( to_date(222,'J'),'Jsp') from dual     
   显示Two Hundred Twenty-Two   
3. 求某天是星期几     
   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;     
   星期一     
   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;     
   monday     
   设置日期语言     
   ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';     
   也可以这样     
   TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')   
4. 两个日期间的天数     
    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;   
5. 时间为null的用法     
   select id, active_date from table1     
   UNION     
   select 1, TO_DATE(null) from dual;     
   注意要用TO_DATE(null)   
6.月份差 
   a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')     
   那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。     
   所以,当时间需要精确的时候,觉得to_char还是必要的     
7. 日期格式冲突问题     
    输入的格式要看你安装的ORAC