使用 Java/EJB 2.x 在 Oracle 上按日期(1916 年 5 月 1 日)查询记录

发布于 2024-08-10 10:53:37 字数 407 浏览 3 评论 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 不会产生任何差异。

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

I have an EJB 2.1 entity bean that queries a "date of birth" column in an Oracle table. The column in the database is of type DATE. The query works without problems except for one specific date: 01 may 1916.

This has something to do with daylight savings. Oracle stores the date as: 5/1/1916 1:00:00 AM, while the time of all other dates is set to 12:00:00 AM (e.g. 1/7/1971 12:00:00 AM).

On the production/acceptation systems a query (with EJB-QL!) for 01 may 1916 return no results. The strange thing is that it does work on my development/test system. I've checked the database settings on the various systems and found the DBTIMEZONE parameter was set to +00:00 on the dev/test boxes and to +02:00 on the production/acceptation boxes. However changing the timezone to +02:00 yields no difference.

What could cause this behavior? How to search for this date of birth?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2024-08-17 10:53:37

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

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

Just a wild guess: You are in Belgium and the date was written incorrectly to the database, so that changing the timezone settings later, won't make any difference when querying?

In Belgium and a few other European countries, DST was introduced on May 1st 1916 by skipping the period from 12AM to 1AM, so May 1st, 12:00AM did in fact not exist. If the database is populated by Java software, I would assume that the Java program already wrote 1AM to the database. What happens if you skip the Java component and use an SQL client to insert and query a "time-less" value to/from the column, e.g. to_date('1916-05-01', 'YYYY-MM-DD')?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文