0

我有一个 EJB 2.1 实体 bean,它查询 Oracle 表中的“出生日期”列。数据库中的列是 DATE 类型。除了一个特定的日期:1916 年 5 月 1 日,查询工作没有问题。

这与夏令时有关。Oracle 将日期存储为:5/1/1916 1:00:00 AM,而所有其他日期的时间设置为 12:00:00 AM(例如 1/7/1971 12:00:00 AM)。

在生产/接受系统上,1916 年 5 月 1 日的查询(使用 EJB-QL!)没有返回任何结果。奇怪的是它确实适用于我的开发/测试系统。我检查了各种系统上的数据库设置,发现 DBTIMEZONE 参数在开发/测试框上设置为 +00:00,在生产/接受框上设置为 +02:00。但是,将时区更改为 +02:00 不会产生任何差异。

什么可能导致这种行为?如何搜索这个出生日期?

4

1 回答 1

1

只是一个疯狂的猜测:您在比利时并且日期被错误地写入数据库,因此稍后更改时区设置不会在查询时产生任何影响?

在比利时和其他一些欧洲国家,DST 是在 1916 年 5 月 1 日通过跳过从凌晨 12 点到凌晨 1 点的时间段而引入的,因此实际上不存在 5 月 1 日凌晨 12 点。如果数据库由 Java 软件填充,我会假设 Java 程序已经将 1AM 写入数据库。如果您跳过 Java 组件并使用 SQL 客户端在列中插入和查询“无时间”值,例如 to_date('1916-05-01', 'YYYY-MM-DD'),会发生什么?

于 2009-11-06T11:07:18.187 回答