java - 针对时间戳列的 Oracle SQL where 子句

标签 java sql oracle

我正在执行以下 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();

最佳答案

Learn about prepared statements ,并使用 native 类型而不是字符串:

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

关于java - 针对时间戳列的 Oracle SQL where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913354/

相关文章:

oracle - 如何将带时区的字符串转换为日期

database - session 中所有查询的 Oracle 中 NULL 值的排序顺序

java - 通过 CGLIB 代理时方法注释为 null

oracle - conn.commit() 之后需要 setautocommit(true)

java - 如何在调用方法时添加和更改 boolean 值。 (遗产)

mysql - 对 MySQL 中特定字段中具有相同值的行进行分组

即使有可用值,MySQL MAX也会返回null

sql - 如何在 SQL 中的 BULK LOAD 命令中传递字符串变量

java - GWT错误: "The output stream has been committed and can no longer be written to"

java - [var =modify(var)] 是一种不好的做法吗?