如何调整SQL查询仅返回当前财年记录且适配每年财年规则
问题根源
你当前的SQL逻辑固定取「上一年8月1日至当年7月31日」的区间,没有根据当前日期动态判断所属财年:
- 若当前日期在当年1-7月,所属财年为「上年8月1日-当年7月31日」,原有逻辑生效
- 若当前日期在当年8-12月,所属财年应为「当年8月1日-下年7月31日」,原有逻辑仍取上一财年区间,就会出现查询到超出目标范围旧数据的问题
适配自动财年的修正代码
SELECT FORMAT(DATEADD("m", 5, [OrderDate]), "\Qq") AS Quarter, * FROM tblOrders WHERE [OrderDate] BETWEEN DateSerial(Year(Date()) - IIF(Month(Date()) < 8, 1, 0), 8, 1) AND DateSerial(Year(Date()) + IIF(Month(Date()) >= 8, 1, 0), 8, 0) ORDER BY tblOrders.OrderDate DESC;
逻辑说明
- 通过
IIF(Month(Date()) < 8, 1, 0)判断当前月份是否在财年起始节点前,动态调整起止年份计算,无需每年手动修改,可永久适配8月1日至次年7月31日的财年规则 DateSerial(年份, 8, 0)会自动返回对应年份7月的最后一天,无需额外处理大小月、闰年的日期边界问题
内容的提问来源于stack exchange,提问作者Fil
相关产品推荐
相关产品推荐

