2013-05-06 83 views
0

我想獲取從HSQL數據庫和查詢的記錄如下:無法在特定範圍內的日期條件查詢

ao.find(Issueda.class, Query.select().where("user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>=  TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')",user,parsedDate,parsedDate)) 

現在,它給了我一個錯誤,「TO_DATE」是無效的關鍵字作爲如下:

at java.lang.Thread.run(Thread.java:662) 
Caused by: java.sql.SQLException: Unexpected token: TO_DATE in statement [SELECT * FROM  
PUBLIC.AO_0371A8_ISSUE_da WHERE user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>= TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')] 

如果我刪除「TO_DATE」我就不是從數據中得到正確的結果數據,並返回NULL只即使數據數據庫中存在。 在數據庫日期字段值的格式是「2013-05-15 00:00:00.000000000」

任何一個plz可以共享我任何替代數據庫查詢?

+0

如果start_date和end_date已經是日期格式,則不需要使用to_date。試試這個'ao.find(Issueda.class,Query.select()。where(「user =?AND START_TIME> = TO_DATE(?,'yyyy/MM/dd')AND END_TIME <= TO_DATE(?,'yyyy/MM/dd')「,user,parsedDate,parsedDate))' – D3V 2013-05-06 11:58:31

+0

@SantoshPingale我只是試過了:它給我錯誤 - 在java.lang.Thread.run(Thread.java:662) 由java.sql .SQLException:意外的標記:TO_DATE在語句[SELECT * FROM PUBLIC.AO_0371A8_ISSUE_da WHERE user =? AND START_TIME> = TO_DATE(?,'yyyy/MM/dd')AND END_TIME <= TO_DATE(?,'yyyy/MM/dd')] – dsi 2013-05-06 13:06:55

+0

對於此查詢,您不需要TO_DATE。使用「START_TIME」? AND END_TIME <?'然後創建一個java.sql.Data來設置PreparedStatement變量。 TO_DATE用於轉換字符串格式的日期。 – fredt 2013-05-06 15:20:05

回答

1

對於此查詢,您不需要TO_DATE。 TO_DATE用於轉換字符串格式的日期。

從您的意見看來,您希望一個參數位於兩個日期之間或兩個日期之外。

對於這種類型的查詢正確的SQL是這樣的:

這將返回開始和結束之間的日期,包括:

WHERE USER=? AND ? BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE) 

這將返回外面開始和結束日期:

WHERE USER=? AND ? NOT BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE) 

對於上述查詢,您使用了一個java.sql.Data對象,其中包含PreparedStatement.setDate(colIndex)

現在,如果要比較的日期是格式爲「2013/05/20」的字符串,則需要使用TO_DATE(?,'yyyy/MM/dd')而不是參數。如果日期爲標準格式的字符串,例如'2013-05-20',那麼您可以使用CAST(? AS DATE)而不是參數。

我假設您的數據庫表列START_TIME和END_TIME定義爲TIMESTAMP類型,但它應該適用於VARCHAR(N)或CHAR(N)類型。

+0

優秀@fredt。這個對我有用。你的第一個查詢實際上解決了「開始和結束之間的日期,包括:」。非常感謝 !。 – dsi 2013-05-08 06:11:34