【问题标题】:MySQL select all rows from this year to a specific month from last yearMySQL选择从今年到去年特定月份的所有行
【发布时间】:2019-09-18 09:52:54
【问题描述】:

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

【问题讨论】:

标签: java mysql sql date jdbc


【解决方案1】:

你的最后一个方法可以使用这种方法来工作

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

【讨论】:

    【解决方案2】:

    您的代码可以是:

    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

    一些参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-03
      • 2014-02-19
      • 2015-09-28
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多