2009-11-06 131 views
0

我有一個EJB 2.1實體bean,用於查詢Oracle表中的「出生日期」列。數據庫中的列是DATE類型的。查詢的工作原理沒有問題,除了一個特定的日期:01年5月1日。使用Java/EJB 2.x按日期查詢記錄(1916年5月1日)

這與夏時制有關。 Oracle存儲日期爲:5/1/1916 1:00:00 AM,而所有其他日期的時間設置爲12:00:00 AM(例如,1/7/1971 12:00:00 AM)。

在生產/接受系統上,1916年1月的查詢(使用EJB-QL!)將返回任何結果。奇怪的是,它在我的開發/測試系統上工作。我檢查了各種系統上的數據庫設置,發現DBTIMEZONE參數在開發/測試框中設置爲+00:00,在生產/接受框中設置爲+02:00。但是,將時區更改爲+02:00不會產生任何差異。

什麼可能導致此行爲?如何搜索這個出生日期?

回答

1

只是一個瘋狂的猜測:你在比利時,日期寫錯了數據庫,以便以後改變時區設置,查詢時不會有什麼區別?

在比利時和其他幾個歐洲國家,DST於1916年5月1日推出,從上午12點跳到上午1點,因此5月1日上午12:00確實不存在。如果數據庫由Java軟件填充,我會假設Java程序已經將1AM寫入數據庫。如果您跳過Java組件並使用SQL客戶端向列中插入和查詢「無時間」值,那麼會發生什麼? to_date('1916-05-01','YYYY-MM-DD')?

+0

直接用SQL客戶端查詢就像一個魅力。由於to_date('1916-05-01','YYYY-MM-DD')忽略時間分量。但是,如何使用EJB 2.x QL從Java執行此操作並不清楚。 – 2009-12-02 11:16:55

相關問題