2013-02-16 57 views
0

我正在執行下面的SQL查詢,但查詢不會返回任何行,即使對應於所選日期的條目存在於表中。Oracle SQL where子句針對時間戳列

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(); 
+0

更好地向我們展示;在DB中插入代碼也。 – 2013-02-16 18:06:07

+0

從registration_timestamp中選擇to_char(timestamp_registered,'yyyy/mm/dd hh24:mi:ss');檢查DB存儲的日期? – 2013-02-16 18:08:37

+0

@KanagaveluSugumar查詢返回** 2013/02/03 11:03:16 ** – 2013-02-16 18:13:15

回答

2

Learn about prepared statements,並使用字符串而不是原生類型:

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

+0

嗯我同意16/02/2013!= 16/02/2013 18:54:32 123421所以什麼我想我只是按日期搜索,我不感興趣的時間部分 – 2013-02-16 18:09:33

+0

'select * from registration_timestamp where trunc(timestamp_registered)=?'。參見http://docs.oracle.com/cd/B19306_01/server.102 /b14200/functions201.htm#i79761 – 2013-02-16 18:18:13

+0

感謝trunc(timestamp_registered)=?解決了我的問題 – 2013-02-16 18:31:22

0

當你的列是datetime和你想要的日期範圍進行搜索,你這樣做:

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

結合這個邏輯與@JBNizet和Bob的叔叔的回答。