【问题标题】:Java trying to extract data according to timestamps in sql, returning inaccurate resultsJava试图根据sql中的时间戳提取数据,返回不准确的结果
【发布时间】:2020-09-08 00:33:47
【问题描述】:

我正在尝试根据“本月最佳投票”和“本周最佳投票”等时间戳从 mysql 表中提取数据 这是用于收集本周(第 4 周)最高票数的 mysql 声明

"SELECT * FROM studentid.questions WHERE vote IN (SELECT MAX(vote) FROM studentid.questions WHERE timestamp BETWEEN '"+currentYear+"-"+currentMth+"-19 00:00:00' AND '"+currentYear+"-"+currentMth+"-24 23:59:59');

这是收集当月(5月)最高票的mysql语句

"SELECT * FROM studentid.questions WHERE vote IN (SELECT MAX(vote) FROM studentid.questions WHERE timestamp BETWEEN '"+currentYear+"-05-01 00:00:00' AND '"+currentYear+"-05-31 23:59:59')"

不知何故,sql语句返回日期范围之外的结果,例如,如果在5月份,有一个数据的票数等于2月份的另一个数据,它会同时显示它们,当它应该只显示从五月... sql results

【问题讨论】:

  • 使用参数而不是字符串连接。
  • @The Impaler by parameters 是指使用 SQL 函数,如 Year()、Month() 等吗?
  • 不,我猜他的意思是在语句中放置问号,然后用参数列表替换它们,如herehere 所述

标签: java mysql date calendar timestamp


【解决方案1】:

您描述的问题的根本原因可能是由于服务器和您的应用程序之间的时区差异,或者您使用参数的方式。如果是后者,您应该将代码更改为使用 JDBC 参数,如下所示:

首先在 Java 中计算“from”和“to”时间戳,然后应用它们:

Timestamp fromTS = ...
Timestamp toTS = ...

PreparedStatement ps = conn.createStatement(
  "SELECT * " +
  "FROM studentid.questions " +
  "WHERE vote IN ( " +
  "  SELECT MAX(vote) FROM studentid.questions " +
  "  WHERE timestamp BETWEEN ? AND ?)"
);
ps.setTimestamp(1, fromTS);
ps.setTimestamp(2, toTS);
ResultSet rs = ps.executeQuery();
...

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2013-10-10
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多