oracle对2位年份的处理

来源:互联网 发布:照相软件哪个好 编辑:程序博客网 时间:2024/04/28 15:44

Oracle数据库中存储4位的年份,但是当你只提供2位数字的年份,那么oracle就会根据你所使用的YY还是RR格式来解释实际,如果提供了完整的年份,那是最好的。

1.RR格式:

 

指定年的2位数字

00-49

50-99

 

 

当年的后

两位数字

00-49

规则1:指定年的前两位数字就等于当年的前两位数字

规则2:指定年的前两位数字就等于当年的前两位数字减去1

50-99

规则3:指定年的前两位数字就等于当年的前两位数字加上1

规则4:指定年的前两位数字就等于当年的前两位数字

我们来看看下面这个查询:

SQL> select

  2   to_char(sysdate,'dd-mm-yyyy') date_1,

  3   to_char(to_date('09-03-11','dd-mm-rr'),'dd-mm-yyyy')date_2,

  4   to_char(to_date('09-03-50','dd-mm-rr'),'dd-mm-yyyy')date_3

  5  from dual;

 

DATE_1    DATE_2    DATE_3

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

09-03-2011 09-03-2011 09-03-1950

 

当前的日期为201139

DATE_2验证了上面的规则1:我提供的rr(11)与当前的系统日期的年份2011的最后两位数字1100-49这个范围。

DATE_3验证了上面的规则2:我提供的rr(50)所在的范围(50-99)大于当前系统年份2011的最后两位数字11所在的范围(00-49),所以将20-1=19,再组合到一起就得到了1950,这才是指定年份的年。

 

如果我们要验证规则3和规则4,那么就得更改操作系统时间。

XP系统中,我们想要修改系统时间的话,可以按照下面的方法来进行。

1、双击任务栏右下角的时间,打开“日期和时间属性”对话窗口。

2、在时间和日期选项卡中,在日期和时间栏里修改我们需要的日期及时间。

3、确定退出后,我们可以看到日期和时间已经是我们想要的结果了。

 

修改会话的时间格式:

SQL> alter session setnls_date_format='yyyy-mm-dd';

Session altered

 

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

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2

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

2087-03-09 16:27:29

 

下面验证规则3和规则4

SQL> select

  2   to_char(sysdate,'dd-mm-yyyy') date_1,

  3   to_char(to_date('09-03-11','dd-mm-rr'),'dd-mm-yyyy')date_2,

  4   to_char(to_date('09-03-50','dd-mm-rr'),'dd-mm-yyyy')date_3

  5  from dual;

 

DATE_1    DATE_2    DATE_3

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

09-03-2087 09-03-2111 09-03-2050

 

规则3:指定的年份是11年,其所在的范围(00-49)小于与当前系统年份2087的年份最后两位数字不在范围(50-99),所以当前年份的前两位数字20+1=21才是指定年份的具体日期:211139日。

规则4:同规则1,我们得到了DATE_3的值:09-03-2050

注意:如果日期中的年份使用RRRR格式,但是只提供了2位的年份,那么oracle数据库就会使用RR格式来解释日期。

 

2.YY格式

在使用YY格式时,如果只提供年份的后两位,那么此年份的前两位与当前系统年份的前两位相同。

SQL> alter session set nls_date_format='yyyy-mm-ddhh24:mi:ss';

Session altered

 

SQL> select

  2   to_char(sysdate) date_1,

  3   to_char(to_date('09-03-11','dd-mm-yy'),'dd-mm-yyyy')date_2,

  4   to_char(to_date('09-03-50','dd-mm-yy'),'dd-mm-yyyy')date_3

  5  from dual;

 

DATE_1             DATE_2    DATE_3

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

2087-03-09 16:49:02 09-03-2011 09-03-2050

 

注意:如果日期中的年份使用了YYYY格式,但是只提供了2位的年份,那么oracle数据库就会使用YY格式来解释日期。

原创粉丝点击