基于财年动态获取数据的MySQL查询语句求解
解决MySQL财年动态筛选数据的问题
你的原查询只通过年份范围筛选,没考虑财年的月份边界(4月到次年3月),所以会包含不符合要求的月份数据。下面是针对两种场景的正确查询语句:
动态获取当前财年的数据
如果需要根据当前日期自动匹配对应的财年(比如现在是2024年5月,就匹配2024年4月-2025年3月),可以用这个查询:
SELECT * FROM rup_calendar WHERE (YEAR = YEAR(CURDATE()) AND MONTH >= 4) OR (YEAR = YEAR(CURDATE()) + 1 AND MONTH <= 3);
逻辑说明
- 第一个条件
(YEAR = YEAR(CURDATE()) AND MONTH >= 4):匹配当前年份中4月及以后的所有记录 - 第二个条件
(YEAR = YEAR(CURDATE()) + 1 AND MONTH <= 3):匹配下一年中1-3月的所有记录
两者结合正好覆盖了完整的财年周期。
指定特定财年的数据
如果要固定筛选2018-19财年(2018年4月至2019年3月),可以直接指定年份和月份范围:
SELECT * FROM rup_calendar WHERE (YEAR = 2018 AND MONTH >= 4) OR (YEAR = 2019 AND MONTH <= 3);
这个查询会精准筛选出你期望的结果集(ROWNO 6到17的记录)。
原查询的问题所在
原语句SELECT * FROM rup_calendar WHERE YEAR BETWEEN YEAR(CURDATE()) AND YEAR(CURDATE())+1;的问题在于,它会包含当前年份的所有月份(比如2018年1-3月)和下一年的所有月份(比如2019年4-12月),这显然不符合财年的时间范围要求,所以无法得到正确结果。
内容的提问来源于stack exchange,提问作者Anil Kumar Reddy
相关产品推荐
相关产品推荐

