0

Oracleテーブルの「生年月日」列を照会するEJB2.1エンティティBeanがあります。データベースの列のタイプはDATEです。クエリは、1つの特定の日付(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

あなたはベルギーにいて、日付が間違ってデータベースに書き込まれたため、後でタイムゾーンの設定を変更しても、クエリの際に違いはありませんか?

ベルギーおよび他のいくつかのヨーロッパ諸国では​​、1916 年 5 月 1 日に午前 0 時から午前 1 時までの期間をスキップすることで DST が導入されたため、実際には 5 月 1 日の午前 0 時は存在しませんでした。データベースが Java ソフトウェアによって取り込まれている場合、Java プログラムが既に 1AM をデータベースに書き込んでいると想定します。Java コンポーネントをスキップし、SQL クライアントを使用して列に「時間のない」値を挿入およびクエリするとどうなりますか?

于 2009-11-06T11:07:18.187 に答える