我正在为一所学校创建一个系统,该系统需要检索从今年4月到去年6月的数据。
我需要一个可以从该日期检索的查询,因为他们的学年总是从6月开始到4月结束。
我尝试使用Where子句选择日期。
"SELECT * FROM students WHERE year(c_date) = ? AND month(c_date) = ? AND c_occupation = 'Student'"
问号用于Java语言,可使用此代码编写语句
pst=conn.prepareStatement(Sql);
pst.setInt(1, year);
pst.setInt(2, month);
我也尝试了这种方法,但是,经过一年,我需要再次输入日期。
SELECT users.* FROM users
WHERE dateadded <= '2019-06-01'
AND dateadded >= '2018-4-30'
我希望它能够根据今天的年份自动生成。
例如今天是2019年3月20日。 我应该可以返回从这一天到2018年6月1日的所有值
答案 0 :(得分:3)
您的代码可以是:
LocalDate from = LocalDate.now().minusYears(1); // 2018-04-29
LocalDate to = LocalDate.of(Year.now().getValue(), Month.JUNE, 1); // 2019-06-01
String sql = "SELECT * FROM students WHERE dateadded BETWEEN ? AND ? AND c_occupation = 'Student'";
pst = conn.prepareStatement(Sql);
pst.setObject(1, from);
pst.setObject(2, to);
LocalDate.now().minusYears(1);
返回去年的同一天LocalDate.of(Year.now().getValue(), Month.JUNE, 1);
返回当年6月1日dateadded BETWEEN ? AND ?
将选择from
和to
日期之间的全部pst.setObject(1, from);
,如果您使用的是JDBC 4+,则可以像这样设置LocalDate
一些参考文献:
答案 1 :(得分:0)
您可以使用此方法使最后一种方法起作用
SELECT * FROM students
WHERE dateadded BETWEEN (CONCAT(YEAR(NOW()), '-06-01') - INTERVAL 1 YEAR) AND CURDATE()
AND c_occupation = 'Student';