日期02/31/2157的意义?

时间:2011-01-11 15:22:33

标签: oracle date powerbuilder

我在大型IT支持环境中工作。现在两次我们看到在Oracle DATE列中插入了无效日期02/31/2157。到目前为止,我还没有能够重现这个问题,但是当用户试图将'00 / 00/0000'保存到列中时,它似乎偶尔会发生。我相信这个价值来源于PowerBuilder DataWindow更新。

该应用程序使用无数的库来处理各种技术,所以这个问题可能有点模糊,但是......

有没有人在某个已建立的库中看到日期02/31/2157,当输入其他无效日期时,Oracle可能会默认为某个库?也许是一个类似于1970年1月1日开始日期的时间概念?

3 个答案:

答案 0 :(得分:4)

来自http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i1847

  

Oracle使用自己的内部格式   存储日期。日期数据存储在   固定长度的七个字节的字段   每个,对应于世纪,年,   月,日,小时,分钟和秒。

2157-256 = 1901,似乎可疑地接近可能的1/1/1900(或12/13/1901 - 这是Year 2038 Problem的翻转日期)

我猜它在日期字节中存储了0x00或0xFF,然后在解码它时感到困惑。 (它如何处理255个月?)

答案 1 :(得分:2)

原来这是一个powerbuilder问题。该字段在数据窗口中创建为必需,但在保存之前以编程方式更改为非必需。因此将空值保存到非空数据库列,并且powerbuilder插入了一些虚拟日期,而不是仅仅抛出错误。

答案 2 :(得分:0)

我记得在保存无效日期时得到一个奇怪的值。 IIRC是在PB 9中,我们必须得到它的EBF。这是Date Editmasks的一个问题,并输入了一个未被拒绝的无效日期。对不起,我没有更多细节。