1. 在 Oracle9i 之前, 日期格式的数据类型默认格式为“DD-MON-YY”,而在 Oracle9i 中为了解决千年问题, 而引入了新的日期型格式为“DD-MON-RR”。

这可以通过select * from sys.nls_database_parameters;进行查看。


2. RR 日期型格式的说明

1)如果当前年份的最后两位数(即不包括世纪)为 0—49,并且指定的年份的最后两

位数也为 0—49,则返回的日期在本世纪。

例如:当前年份为 2005 年,指明的日期是 01-OCT-08,则 RR 日期格式返回的日期

为:2008年10月 1 日。而 YY 日期格式返回的日期也为:2008 年10月 1日


2)如果当前年份的最后两位数(即不包括世纪)为 0—49,并且指定的年份的最后两位

数为 50—99,则返回的日期在上一世纪。

例如:当前年份为 2005年,指明的日期是 01-OCT-98,RR 日期格式返回的日期为:

1998 年 10 月 1 日。而 YY 日期格式返回的日期为:2098 年 10 月 1 日。


3)如果当前年份的最后两位数(即不包括世纪)为 50—99,并且指定的年份的最后两

位数为 0—49,则返回的日期在下一世纪。

例如:当前年份为 1999年,指明的日期是 01-OCT-08,RR 日期格式返回的日期为:

2008年 10月 1 日。而YY 日期格式返回的日期为:1908年 10月 1 日。


4)如果当前年份的最后两位数(即不包括世纪)为 50—99,并且指定的年份的最后两

位数也为 

例如:当前年份为 1999年,指明的日期是 01-OCT-98,RR 日期格式返回的日期为:

1998年 10月 1 日。而YY 日期格式返回的日期也为:1998年10月 1 日。


3. Oracle时间显示形式

Oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。例如,使用us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显示为:28-Jan-2003;而使用zhs16gbk字符集(或其他中文字符集)时时间格式缺省显示为:2003-1月-28。向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。若要查看当前会话的时间格式,可以使用以下的SQL语句:

SQL> select sysdate from dual;


4. 向Oracle表中插入时间格式的数据

这是一个相对来讲比较麻烦的事情,要么你严格遵从当前会话的时间格式书写你的时间值,要么使用转换函数自定义时间数据的格式。与date操作关系最大的就是两个转换函数:to_date(),to_char()。

 

1)to_date(字符串,日期格式)则把格式字符类型转换日期类型,通常在insert 语句中使用。具体用法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换日期格式,注意,前后两者要一一对应。

例如:to_date('2005-12-27 14:28:25',’yyyy-mm-dd hh24:mi:ss') 将得到具体的时间。

 

2)to_char(日期值,日期格式)函数将日期值按一定格式转换为字符串日期形式,通常在查询中使用;例如把当前时间按yyyy-mm-dd hh24:mi:ss格式转换成字符类型,可用下面语句:

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual;

TIME

-------------------

2005-12-29 15:02:25

 

附: 多种日期格式参数说明 

iyyy: ISO标准的四位年份 

yyyy: 四位年份 

yyy,yy,y: 年份的最后三位,两位,一位 

month: 九个字符表示的月份全名 

mon: 三位字符的月份简写 

mm: 01~12的月份编号  

d: 一周中的星期几 

day: 九个字符表示的天的全称,使用空格填充到9个字符 

ddd: 年中的第几天 

dd: 月份中的第几天 

dy: 天的简写名 

iw: ISO标准的年中的第几周 

ww: 年中的第几个星期

w: 该月的第几个星期 

hh24: 一天中的第几个小时,按24小时计, 取值为00~23

hh,hh12: 一天中的第几个小时,按12小时计 

mi: 一小时中的分钟

ssss:从午夜开始过去的秒数

ss: 一分钟中的秒

 

另外:

24小时格式下时间范围为: 0:00:00 - 23:59:59.... 

12小时格式下时间范围为: 1:00:00 - 12:59:59 ....