Java 尝试根据 sql 中的时间戳提取数据,返回不准确的结果
Java trying to extract data according to timestamps in sql, returning inaccurate results
我正在尝试根据 'Top votes of the Month' 和 'Top votes of the week' 等时间戳从 mysql 表中提取数据
这是 mysql 收集本周(第 4 周)最高投票的声明
"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');
这是 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 语句 returns 结果超出了日期范围,例如,如果在 5 月份,有一个数据的票数等于 5 月份的另一个数据二月,它会显示它们,当它应该只显示从五月...
sql results
您描述的问题的根本原因可能是由于服务器和您的应用程序之间的时区差异,或者您使用参数的方式。如果是后者,您应该更改代码以使用 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();
...
我正在尝试根据 'Top votes of the Month' 和 'Top votes of the week' 等时间戳从 mysql 表中提取数据 这是 mysql 收集本周(第 4 周)最高投票的声明
"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');
这是 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 语句 returns 结果超出了日期范围,例如,如果在 5 月份,有一个数据的票数等于 5 月份的另一个数据二月,它会显示它们,当它应该只显示从五月... sql results
您描述的问题的根本原因可能是由于服务器和您的应用程序之间的时区差异,或者您使用参数的方式。如果是后者,您应该更改代码以使用 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();
...