MySQL选择从今年到去年的特定月份的所有行

时间:2019-04-29 18:33:46

标签: java mysql sql date jdbc

我正在为一所学校创建一个系统,该系统需要检索从今年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日的所有值

2 个答案:

答案 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 ?将选择fromto日期之间的全部
  • 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';