我需要在特定日期范围之间选择一些数据集,该表的日期和时间为"23-JUL-18 04.03.02.584000000 PM"
格式(TIMESTAMP(3))。
使用Java在 23-JUL-18 04.00.00 和 23-JUL-18 04.03.02 之间过滤数据的方法是什么。
编辑: 我需要使用准备好的语句传递日期范围,而我正在使用Java 7
提前谢谢!
答案 0 :(得分:2)
如果您是通过JDBC从Java调用Oracle,那么最好的办法是使用准备好的语句:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String lower = "2018-07-23 04:00:00";
String upper = "2018-07-23 04:03:02";
LocalDateTime lowerdt = LocalDateTime.parse(lower, formatter);
LocalDateTime upperdt = LocalDateTime.parse(upper, formatter);
String sql = "SELECT * FROM yourTable WHERE ts_col BETWEEN ? AND ?;";
Statement statement = conn.createStatement(sql);
statement.setTimestamp(1, Timestamp.valueOf(lowerdt));
statement.setTimestamp(2, Timestamp.valueOf(upperdt));
ResultSet rs = statement.executeQuery();
while (rs.next()) {
// process result set
}
这是Java 8+使用预准备语句对Oracle运行带有时间戳的select的方法。除了形成BETWEEN
子句外,没有太多需要说明的地方,我们从两点的标准字符串时间戳开始。然后,我们解析为LocalDateTime
,最后将它们带入java.sql.Timestamp
。
Here是一个有用的GitHub页面的链接,该页面显示了Java 8和Oracle以多种不同方式使用的JDBC。
编辑:以下是您如何在Java 7中执行上述操作的示例:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String lower = "2018-07-23 04:00:00";
String upper = "2018-07-23 04:03:02";
Date lowerdt = formatter.parse(lower);
Date upperdt = formatter.parse(upper);
String sql = "SELECT * FROM yourTable WHERE ts_col BETWEEN ? AND ?;";
Statement statement = conn.createStatement(sql);
statement.setTimestamp(1, new java.sql.Timestamp(lowerdt.getTime()));
statement.setTimestamp(2, new java.sql.Timestamp(upperdt.getTime()));
ResultSet rs = statement.executeQuery();
while (rs.next()) {
// process result set
}