yyyy:四位数的年份
rrrr:四位数的年份
yy:两位数的年份
rr:两位数的年份
mm:两位数的月份(数字)
D:一周的星期几
DD:一月的第几天
DDD :一年的第几天
YEAR:英文的年份
MONTH:英文全称的月份
mon:英文简写的月份
ddsp:英文的第几天(一个月的)
ddspth:英文序列数的第几天(一个月的)
DAY:全英文的星期
DY:简写的英文星期
hh:小时
mi:分钟
ss:秒
二、千年虫问题(参见: 千年虫问题的发现者及相关 )
千年虫:
在早期的计算机的程序中规定了的年份仅用两位数来表示。也就是说,假如是1971年,在计算机里就会被表示为71,但是到了2000年的时候这个情况就出现了问题,计算机就会将其年份表示为00。这样的话计算机内部对年份的计算就会出现问题。这个事情当时被称为千年虫
数据库中表示日期中年份的有俩种: yy和rr
之前一直使用的是yy格式,后来才有的rr格式
yy表示使用一个俩位数表示当前年份:
1990 ---yy数据库格式---> 90
1968 ---yy数据库格式---> 68
1979 ---yy数据库格式---> 79
rr格式表示: 另外参照图片:rr日期格式规则.png
如果日期中的年份采用的格式为rr,并且只提供了最后2位年份,那么年份中的前两位数字就由两部分共同确定:提供年份的两位数字(指定年),数据库服务器上当前日期中年份的后2位数字(当年)。
规则1 如果指定年在00~49之间,并且当前年份在00~49之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为15,而当前年份为2007,那么指定年就是2015。
规则2 如果指定年在50~99之间,并且当前年份在00~49之间,那么指定年的世纪就等于当前年份的世纪减去1。因此,指定年的前两位数字等于当前年份的前两位数字减去1。例如,如果指定年为75,而当前年份为2007,那么指定年就是1975。
规则3 如果指定年在00~49之间,并且当前年份在50~99之间,那么指定年的世纪就等于当前年份的世纪加上1。因此,指定年的前两位数字等于当前年份的前两位数字加上1。例如,如果指定年为15,而当前年份为2075,那么指定年就是2115。
规则4 如果指定年在50~99之间,并且当前年份在50~99之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为55,而当前年份为2075,那么指定年就是2055。
如下所示,日期中的年份采用的格式为rr,并且只提供了最后2位年份
select to_char(to_date('25-may-12','dd-month-rr'),'yyyy-mm-dd') from dual;
如上图所示,由于指定的两位数字为12,当前年份的后两位数字位16(今年是2016年),所以指定年属于0-49的范围,而当前年也属于0-49的情况,所以属于规则1,这时数据库就以规则1的形式存储指定年的年份为2012,故当我们使用四个年份长度的‘yyyy’读取时,便显示2012
select to_char(to_date('25-may-72','dd-month-rr'),'yyyy-mm-dd') from dual;
如上图所示,由于指定的两位数字为72,当前年份的后两位数字位16(今年是2016年),所以指定年72属于50-99的范围,而当前年16属于0-49的情况,所以属于规则2,这时数据库就以规则2的形式存储指定年(此时的指定世纪为当时世纪减1,即19)的年份为1972,故当我们使用四个年份长度的‘yyyy’读取时,便显示1972
如下面所示,我把我的系统时间手动更改为2076年9月20日,由于我的是本地oracle数据库,所以 数据库的本地时间也会跟随系统变化
select to_char(to_date('25-may-72','dd-month-rr'),'yyyy-mm-dd') from dual;
如上图所示,由于指定的两位数字为72,当前年份的后两位数字为76(即oracle获取的本地时间(当前时间)是2076年),所以指定年72属于50-99的范围,而当前年76也属于50-99的情况,所以属于规则4,这时数据库就以规则4的形式存储指定年(此时的指定世纪为当前世纪,即20)的年份为2072,故当我们使用四个年份长度的‘yyyy’读取时,便显示2072
select to_char(to_date('25-may-12','dd-month-rr'),'yyyy-mm-dd') from dual;
如上图所示,由于指定的两位数字为12,当前年份的后两位数字为76(即oracle获取的本地时间(当前时间)是2076年),所以指定年12属于0-49的范围,而当前年76属于50-99的情况,所以属于规则3,这时数据库就以规则3的形式存储指定年的年份为2172(此时的指定世纪为当前世纪+1,即21),故当我们使用四个年份长度的‘yyyy’读取时,便显示2112
三、oracle数据库中表示一个日期数据的几种方式
2.使用oracle默认的日期格式 例如:'25-MAY-95'
3.使用日期函数ADD_MONTHS/NEXT_DAY/LAST_DAY/ROUND/TRUNC
4.使用转换函数to_date,使用是注意格式