Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1182589
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2007-12-24 22:40:11

Oracle在内部使用Julian days进行日期的算术,一个日期的Julian day是指01-JAN-4713 BC(包括)以来的天数。
由于没有0年,并且Oracle's DATE的验证拒绝0年,而Julian day允许0年。因此虽然31-DEC-0001 BC的下一天是01-JAN-0001 AD,而Oracle认为这之间有其他366天,因此会在那一年产生不存在的天数。
alter session set nls_date_format = 'DD-MON-YYYY BC';
ALTER SESSION SET NLS_DATE_LANGUAGE=AMERICAN;
SQL> select to_date('01-JAN-0001 AD') - to_date('31-DEC-0001 BC') from dual;
TO_DATE('01-JAN-0001AD')-TO_DA
------------------------------
                           367
对于范围在Julian days之间并且Oracle不映射到0年的,可以使用其作为函数来转换数字到单词格式。
SQL> select to_char(to_date(9999999, 'J'), 'JSP') from dual;
select to_char(to_date(9999999, 'J'), 'JSP') from dual
ORA-01854: julian 日期必须介于 1 和 5373484 之间
SQL> select to_char(to_date(5373484, 'J'), 'JSP') from dual;
TO_CHAR(TO_DATE(5373484,'J'),'
--------------------------------------------------------------------------
FIVE MILLION THREE HUNDRED SEVENTY-THREE THOUSAND FOUR HUNDRED EIGHTY-FOUR
SQL> select to_char(to_date(123456, 'J'), 'JSP') from dual;
TO_CHAR(TO_DATE(123456,'J'),'J
--------------------------------------------------------
ONE HUNDRED TWENTY-THREE THOUSAND FOUR HUNDRED FIFTY-SIX
SQL> select to_char(to_date(1721058, 'J'), 'JSP') from dual;
select to_char(to_date(1721058, 'J'), 'JSP') from dual
ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0
Oracle虽然意识到了这个bug单是并没有考虑修复,因为其有些困难,相反在文档中指明Oracle's Julian从4712 BC开始。
阅读(633) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~