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 ....