2015-05-14 50 views
1

我想按日期篩選查詢。賈斯珀 - 甲骨文 - 如何按日期篩選

我有這條線我的查詢:

AND (the_date like CONCAT (TO_DATE($P{THE_DATE}, 'YYYY-MM-DD'),'%')) 

不過,我似乎無法有效地進行參數對比日期到數據庫的日期。

數據庫日期的類型是DATE。參數的類型是String。

我也試過:

AND (TO_CHAR(the_date) like CONCAT ($P{THE_DATE,'%') 

我的數據類型錯了嗎?我嘗試過其他人,但無濟於事。我的查詢錯誤了嗎?

我正在使用iReport ...我查找了一些調試選項,看看實際正在執行,但沒有找到任何。

回答

0

如果要比較日期,則需要使用TO_DATE將文字轉換爲DATE。

不需要使用LIKE運營商。您可以在DATE列上使用TRUNC,但是,這將抑制任何常規索引的使用情況。最好使用日期範圍條件

請記住,DATE包含日期和時間元素。

例如,

WHERE 
    the_date >= TO_DATE('14-MAY-2015','DD-MON-YYYY') 
AND 
    the_date < TO_DATE('14-MAY-2015','DD-MON-YYYY') +1; 

而是在上面的例子中文字,你可以用你的INPUT參數或已定義爲字符串當地變量

WHERE 
    the_date >= TO_DATE(in_date,'DD-MON-YYYY') 
AND 
    the_date < TO_DATE(in_date,'DD-MON-YYYY') +1; 
+0

我喜歡這個想法,但事實證明,我以錯誤的格式傳遞參數 - 從字面上看,我花了整整一天的時間,儘管做了很多變化和多次重複的努力,但仍然保持正確。謝謝你的回答! :) – Dee

+0

@Dee你可以標記它回答如果它幫助你。 –

0

存儲在數據庫中的格式類似12/MAY/15。 儘管我確信我在String類型的輸入參數中嘗試了這一點,但事實證明這是一個神奇的答案:)我的輸入是'12/MAY/15'並且它工作正常。