0

以下のSQLクエリを実行していますが、選択した日付に対応するエントリがテーブルに存在していても、クエリは行を返しません。

    Date getdatetemp =  datechooser.getDate();     // getting the date selected by user
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    java.sql.Date extdate=new java.sql.Date(getdatetemp.getTime());
    String getdate=sdf.format(extdate);
    String sql="SELECT * from registration_timestamp where timestamp_registered=TO_DATE('"+getdate+"','dd/MM/yyyy')";
    PreparedStatement pst=connection.prepareStatement(sql);
    ResultSet res=pst.executeQuery();  
    pst.close();
    res.close();
4

2 に答える 2

2

プリペアド ステートメントについて学び、文字列の代わりにネイティブ型を使用します。

java.sql.Date extDate = new java.sql.Date(getDateTemp.getTime());
String sql = "SELECT * from registration_timestamp where timestamp_registered=?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(1, extDate);
ResultSet rs = stmt.executeQuery();

とはいえ、タイムスタンプについて話しているので、タイムスタンプにはナノ秒の精度があるため、データベースに保存されている日付に日付部分に加えて時間部分があることが問題になる可能性があります。

16/02/2013 != 16/02/2013 18:54:32 123421

その場合 (そしてそのように思われる場合)、選択した日付を日付に切り捨てられたタイムスタンプと比較します。

select * from registration_timestamp where trunc(timestamp_registered) = ?

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions201.htm#i79761を参照してください。

于 2013-02-16T18:04:24.940 に答える
0

列が日時で、日付範囲で検索する場合は、次のようにします。

select whatever
from yourtables
where yourdatefield >= DateA
and yourdatefield < the day after DateB

このロジックを @JBNizet とボブの叔父からの回答と組み合わせます。

于 2013-02-16T18:16:53.787 に答える