报表中Date Filter Logic对应的时间范围解析问询
日期过滤逻辑解析与时间段计算
原SQL日期过滤代码:
BETWEEN (((to_date(20230822, 'yyyymmdd') - DAY (to_date(20230822, 'yyyymmdd')) DAY + 1 DAY)) +(1) MONTH) AND ((((to_date(20230822, 'yyyymmdd') - DAY (to_date(20230822, 'yyyymmdd')) DAY + 1 DAY) + 1 MONTH- 1 DAY)) +(1) MONTH)
核心逻辑拆解
这段代码以20230822为基准日期,先定位到基准日期所在月份的第一天,再以此为基础计算目标时间段。
起始日期计算
- 将数字
20230822转换为日期格式:2023-08-22 - 提取该日期的“日”部分:
22 - 用基准日期减去对应天数再加1天,得到基准月的第一天:
2023-08-22 - 22天 + 1天 = 2023-08-01 - 给该日期加1个月,得到时间段起始点:
2023-09-01
结束日期计算
- 前3步与起始日期计算一致,先得到基准月第一天
2023-08-01 - 加1个月再减1天,得到基准月的最后一天:
2023-08-01 + 1个月 -1天 = 2023-08-31 - 给该日期加1个月,由于9月没有31天,数据库会自动调整为当月最后一天:
2023-09-30(即时间段结束点)
最终对应时间段
该过滤条件匹配的是2023年9月1日到2023年9月30日之间的所有日期(具体时间范围会根据数据库日期类型,默认覆盖当日的00:00:00至23:59:59)。
内容的提问来源于stack exchange,提问作者Michael McCormick
相关产品推荐
相关产品推荐

