在查询中比较 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 日期时间失败并且不返回任何记录的主要内容,如果未能解决你的问题,请参考以下文章