簡體   English   中英

如何在Java中查詢數據庫中的日期間隔?

[英]How to query a date interval in a database in java?

我有一個表和一個日期列,其中以下列格式保存時間戳值:

yyyy-MM-dd HH:mm:ss

然后我要進行查詢,以返回特定的時間間隔。 我給出開始日期和結束日期。 這是我所做的:

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from transactions where transid=? and date >= ? and date <= ?");

    find.setString(1, selected.getIban());
    find.setDate(2, (Date) dt1);
    find.setDate(3, (Date) dt2);

    ResultSet res=find.executeQuery();

    while(res.next()){
        ....
    }

調試時,我看到dt1和dt2正確設置為以下格式:

yyyy-MM-dd

此結果集中沒有結果(不是null,而是空),並且while循環不執行。 我不能像查詢中那樣使用> =和<=來做到這一點嗎? 還是因為我將時間戳存儲在db中,但查詢了日期,而這些具有不同的格式。

謝謝

使用prepareStatement.setTimestamp(); 代替setDate()

使用setTimestamp

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from transactions where transid=? and date >= ? and date <= ?");

    find.setString(1, selected.getIban());
find.setTimestamp(2, new Timestamp(((Date) dt1).getTime()));
find.setTimestamp(3, new Timestamp(((Date) dt2).getTime()));

    ResultSet res=find.executeQuery();

    while(res.next()){
        ....
    }

或將日期轉換為st並通過

    PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from                transactions where transid=? and date >= ? and date <= ?");

        find.setString(1, selected.getIban());
   find.setString(2, (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) dt2)));
    find.setString(3, (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) dt2)));

        ResultSet res=find.executeQuery();

        while(res.next()){
            ....
        }

我想出了怎么做。 問題在於,由於Date和TIMESTAMP是不同種類的變量,因此比較它們將返回空。 為了解決這個問題,我只是稍微更改了查詢:

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from transactions where transid=? and DATE(date) >= ? and DATE(date) <= ?");        
find.setString(1, selected.getIban());
find.setDate(2,  dt1);
find.setDate(3, dt2);

現在可行

為什么不嘗試使用靜態時間戳,例如

select * from transactions    
where data > '2013-07-16 00:00:00'
and data < '2013-07-20 00:00:00' 

並查看問題是否出在sql或程序中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM