我的猜测是它不应该有,因为他们在日期中也使用世纪
从这里开始,
DATE 数据类型存储年(包括世纪)、月、日、小时、分钟和秒(午夜之后)。
它遇到问题了吗?
是的,Oracle 受到 Y2K 错误的影响。在 Oracle 7 之前,数据库不存储世纪。向后兼容性意味着 Oracle 7 数据库使用 DD-MON-YY 作为日期的默认格式掩码。如果您使用该掩码创建日期,则世纪默认为当前世纪。现在仍然存在上个世纪的日期或下个世纪的日期的问题。严格来说,这是一个应用程序问题,而不是存储问题。
作为此 Oracle 的一种变通方法,将 RR 元素引入日期掩码,它基于日期窗口派生一个世纪。这是为了显示目的。当然,这种变通方法现在已成为一种嵌入式功能,并导致其自身的各种问题。尤其是因为应用程序将其用作输入格式掩码,而不是要求用户明确输入世纪。
无论如何,这就是它的工作原理。
SQL> insert into t72 values (1, to_date('12-MAY-32', 'DD-MON-YY'))
2 /
1 row created.
SQL> insert into t72 values (2, to_date('12-MAY-99', 'DD-MON-YY'))
2 /
1 row created.
SQL> insert into t72 values (3, to_date('12-MAY-50', 'DD-MON-YY'))
2 /
1 row created.
SQL> insert into t72 values (11, to_date('12-MAY-32', 'DD-MON-RR'))
2 /
1 row created.
SQL> insert into t72 values (12, to_date('12-MAY-99', 'DD-MON-RR'))
2 /
1 row created.
SQL> insert into t72 values (13, to_date('12-MAY-50', 'DD-MON-RR'))
2 /
1 row created.
SQL> insert into t72 values (14, to_date('12-MAY-49', 'DD-MON-RR'))
2 /
1 row created.
SQL>
表格内容:
SQL> alter session set nls_date_format = 'DD-MON-YYYY'
2 /
Session altered.
SQL> select * from t72
2 /
ID D
---------- -----------
1 12-MAY-2032
2 12-MAY-2099
3 12-MAY-2050
11 12-MAY-2032
12 12-MAY-1999
13 12-MAY-1950
14 12-MAY-2049
7 rows selected.
SQL>
1-49 年分配 19 和 0、50-99 分配 20。
值得重申的是,在 Oracle 中,Y2K 错误是一个应用程序问题,而不是存储问题。每个现有的应用程序仍然允许用户编写日期,因为 09 年 14 月 14 日使该错误永久存在。就 RR 面具鼓励这种懒惰而言,它使事情变得更糟。
正如 APC 所说,自 V7 以来,Oracle 已经以完整的日期时间格式存储日期,并且大多数客户端应用程序还在 2K 截止日期之前的某个时间更正了任何使用显式 -YY 格式掩码的情况。
但是,我已经看到自 2K 以来发生的错误,人们重新使用 -YY 格式掩码,并且在测试中没有注意到,因为他们的所有测试数据都是 Y2K 后的 - 特别是在进行日期/字符串/日期操作时 - 人为例子 :
TO_DATE(TO_CHAR(a_date_column,'DD-MM-YY')||'12:00','DD-MM-YYHH24:MI')
如果您正在处理将日期和时间存储为单独的数据库列的遗留系统,这种逻辑是很常见的。语法可能是特定于 Oracle 的,但问题实际上是通用编程问题。
我看到与 Oracle 相关的更多问题是围绕 NLS 日期设置。我见过 DBA 重建数据库但将默认格式设置回 -YY,我还看到 JDBC 连接将会话格式设置为 -YY、从操作系统环境继承并覆盖数据库导致的错误默认。
这些都不是 Oracle 软件的错误,只要系统和编程语言允许 2 位数年份,“Y2K”问题就会存在,这是值得的。
是的,看起来他们做到了:
http://news.cnet.com/Oracle-offers-free-Y2K-upgrade/2100-1001_3-222123.html
不确定他们是否遇到了您所指的确切问题。
可能有点题外话,但是......
在 Y2K 期间,我一直在为 Oracle Support 工作,包括过渡之夜本身。
我们整晚都接到一个电话——一位客户要求提供一份甲骨文的 Y2K 声明副本。有点晚了我想。:)
除此之外,不要记得接到任何关于千年虫问题的电话。(请注意,虽然我没有在 RDBMS 服务器组工作)