使用YY格式如果日期中的年份采用的格式为YY,并且只提供了2位的年份,那么就认为这一年的世纪与数据库服务器上当前设置的世纪相同。因此,指定年份的前两位数字与当前年份的前两位数字相同。例如,如果提供的年份是15,而当年是2007年,那么提供的年份就是2015年。同理,如果提供的年份是75,那么就是2075年。注意:如果日期中的年份使用YYYY格式,但是只提供了2位的年份,那么Oracle数据库就会使用YY格式来解释日期。下面来看一个查询,它在处理年份15和75时使用YY格式。在下面这个查询中,注意向TO_DATE()函数输入的年份是15和75,其输出又被传递给TO_CHAR函数,后者将日期转换为DD-MON-YYYY格式的字符串(此处使用了YYYY格式,这样就可以看到TO_DATE函数返回的4位年份)。 SELECTTO_CHAR(TO_DATE('04-JUL-15', 'DD-MON-YY'), 'DD-MON-YYYY'),TO_CHAR(TO_DATE('04-JUL-75', 'DD-MON-YY'), 'DD-MON-YYYY')FROM dual;TO_CHAR(TO_ TO_CHAR(TO_----------- -----------04-JUL-2015 04-JUL-2075 正如期望的一样,15和75分别被解释为2015年和2075年。使用RR格式
如果日期中的年份采用的格式为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位年份,那么年份中的前两位数字就由两部分共同确定:提供年份的两位数字(指定年),数据库服务器上当前日期中年份的后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。
select * from nls_database_parameters where PARAMETER ='NLS_DATE_FORMAT'
INSERT INTO job_history VALUES(
102 , TO_DATE('13-JAN-93','dd-mm-yyyy'), TO_DATE('24-JUL-98','dd-mm-yyyy'), 'IT_PROG', 60 )
SQL> select TO_DATE('13-JAN-93','dd-mm-yyyy'),TO_DATE('24-JUL-98','dd-mm-yyyy') from dual;
select TO_DATE('13-JAN-93','dd-mm-yyyy'),TO_DATE('24-JUL-98','dd-mm-yyyy') from dual
*
第 1 行出现错误:
ORA-01858: 在要求输入数字处找到非数字字符
如果格式为YYY且只提供了最后2位年份,那么服务器会同YY格式一样操作;
如果格式为YYYY且只提供了最后2位年份,那么服务器会在前面接00;
如果格式为RR或RRRR且只提供了最后2位年份,则确定世纪的规则如下:
确定指定年世纪的规则如下:
● 如果指定年在00~49之间,并且当前年份在00~49之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为15,而当前年份为2007,那么指定年就是2015。
● 如果指定年在50~99之间,并且当前年份在00~49之间,那么指定年的世纪就等于当前年份的世纪减去1。因此,指定年的前两位数字等于当前年份的前两位数字减去1。例如,如果指定年为75,而当前年份为2007,那么指定年就是1975。
● 如果指定年在00~49之间,并且当前年份在50~99之间,那么指定年的世纪就等于当前年份的世纪加上1。因此,指定年的前两位数字等于当前年份的前两位数字加上1。例如,如果指定年为15,而当前年份为2075,那么指定年就是2115。
● 如果指定年在50~99之间,并且当前年份在50~99之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为55,而当前年份为2075,那么指定年就是2055。
使用YY格式
如果日期中的年份采用的格式为YY,并且只提供了2位的年份,那么就认为这一年的世纪与数据库服务器上当前设置的世纪相同。因此,指定年份的前两位数字与当前年份的前两位数字相同。例如,如果提供的年份是15,而当年是2007年,那么提供的年份就是2015年。同理,如果提供的年份是75,那么就是2075年。
注意:
如果日期中的年份使用YYYY格式,但是只提供了2位的年份,那么Oracle数据库就会使用YY格式来解释日期。
下面来看一个查询,它在处理年份15和75时使用YY格式。在下面这个查询中,注意向TO_DATE()函数输入的年份是15和75,其输出又被传递给TO_CHAR函数,后者将日期转换为DD-MON-YYYY格式的字符串(此处使用了YYYY格式,这样就可以看到TO_DATE函数返回的4位年份)。 SELECTTO_CHAR(TO_DATE('04-JUL-15', 'DD-MON-YY'), 'DD-MON-YYYY'),TO_CHAR(TO_DATE('04-JUL-75', 'DD-MON-YY'), 'DD-MON-YYYY')FROM dual;TO_CHAR(TO_ TO_CHAR(TO_----------- -----------04-JUL-2015 04-JUL-2075 正如期望的一样,15和75分别被解释为2015年和2075年。使用RR格式
如果日期中的年份采用的格式为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。