为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

三国纷争 2022-10-26 17:03:21
我正在为需要从去年 4 月到 6 月检索数据的学校创建一个系统。我需要一个可以从此日期检索的查询,因为他们的学年总是从六月开始,到四月结束。我尝试使用 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 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超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这样设置


查看完整回答
反对 回复 2022-10-26
?
慕村9548890

TA贡献1884条经验 获得超4个赞

可以使用这种方法使您的最后一种方法起作用

SELECT * FROM students 
WHERE dateadded BETWEEN (CONCAT(YEAR(NOW()), '-06-01') - INTERVAL 1 YEAR) AND CURDATE() 
AND c_occupation = 'Student';


查看完整回答
反对 回复 2022-10-26
  • 2 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信