在查询中比较 oracle 日期时间失败并且不返回任何记录

Posted

技术标签:

【中文标题】在查询中比较 oracle 日期时间失败并且不返回任何记录【英文标题】:comparing oracle date time in query fails and returns no records 【发布时间】:2016-01-11 13:27:11 【问题描述】:

我是 oracle 新手,在选择记录时比较日期时遇到了愚蠢的问题。

我的 tableX 中有一个名为 req_datetime 的字段,它被声明为类型 DATE

在插入记录时,我只是在 java 格式下使用,并且插入日期就好了。

SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyy HH:mm:ss");

虽然我在 sql developer 的查询下运行它没有返回任何记录,但在比较日期格式时似乎存在一些问题。我尝试了很多日期格式,但都没有奏效。

我注意到一件事,如果我使用 sql developer 手动打开表并立即重置日期,那么查询将只返回我使用 sql developer 更改日期的行。

这是我的 sql 查询

SELECT * from tableX Where cardno='xyzzz' AND req_datetime >=TO_DATE('11/Jan/2016 00:00:00','dd/mon/yyyy HH24:MI:SS')  ORDER BY req_datetime ASC

请需要您的帮助。谢谢 更新图片:

【问题讨论】:

确保您没有未提交的交易。您的查询是正确的。 尝试将其与 sysdate 进行比较并告诉我会发生什么,另外,您能否在 req_datetime 列中给我们举个表格内的日期示例? 如果你选择了那个 cardno 的 max(req_datetime),你会得到什么? @Dan Bracuk - 我得到日期作为输出 11-01-0016 18:27:17 您似乎将数据回溯了几千年。此外,您可能会因为将水平滚动条恢复到问题中的代码而被枪杀和小便。 【参考方案1】:

为什么不简单地用TO_DATE 插入它?例如:

String sql = "INSERT INTO table x (req_datetime, ....) VALUES "
      + "(to_date('"+ getCurrentTimeStamp()+ "', 'yyyy/mm/dd hh24:mi:ss'), ...)";

private static String getCurrentTimeStamp() 
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    java.util.Date today = new java.util.Date();
    return dateFormat.format(today.getTime());

【讨论】:

我很乐意这样做,但是当我尝试以您提到的格式插入日期时,它给了我例外 -2016/01/11 19:53:33 System.Data.OracleClient.OracleException (0x80131938 ): ORA-01861: 文字与格式字符串不匹配 更好的是,在 java 中创建一个日期时间对象并将其用作查询参数。 @Roger 我是否遗漏了上面的某些内容或是否有效? Dan 的想法也不错:您可以在查询中使用? 并绑定参数。检查示例java2s.com/Code/Java/Database-SQL-JDBC/… @Trinimon 成功了!非常感谢大家的支持,真的很感激。

以上是关于在查询中比较 oracle 日期时间失败并且不返回任何记录的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何设置年月日?

为啥查询不使用Oracle中的索引

Sharepoint Online 高级搜索日期过滤器失败

Oracle 多个子查询全部或全部返回

Oracle 正则表达式匹配

无法正确比较 oracle 中的 2 个日期