You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PLSQL中基于bill_date字段筛选上月客户账单数据的实现问题

解决方案

核心需求为筛选bill_acct_billcycle表中bill_date属于上一自然月的所有记录,不受不同客户账单日差异的影响,可通过月份维度匹配实现全覆盖:

  • 核心判断逻辑:将bill_date截断到月份维度,和系统时间上个月的截断月份对比,只要属于同一个月就匹配,不受具体账单日是几号的影响。

Oracle 语法实现

在原游标c1的WHERE条件中添加如下判断即可:

AND TRUNC(bab.bill_date, 'MM') = TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')

逻辑说明

  • TRUNC(date, 'MM'):将日期截断到当月第一天,比如2024-03-15截断后为2024-03-01
  • ADD_MONTHS(SYSDATE, -1):获取当前时间往前推1个月的日期
  • 两者截断到月份后对比,所有上个月任意日期的bill_date都会被匹配到,完全覆盖不同客户的不同账单日场景

修改后完整游标代码

CURSOR c1 IS
SELECT DISTINCT intl_prod_id
      FROM apld_bill_rt abr,
           acct_bill ab,
           bill_acct_billcycle bab
      WHERE abr.CHRG_TP = 'INSTALLMENT'
          AND abr.TAX_CATG_ID = 'NOTAX'
          AND abr.acct_bill_id = ab.acct_bill_id
          AND ab.bill_date = bab.bill_date
          -- 新增上月匹配逻辑
          AND TRUNC(bab.bill_date, 'MM') = TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM');

扩展适配方案(可选)

如果后续需要灵活指定统计月份,不需要写死取上个月,可以给存储过程加一个日期入参p_stat_date DATE DEFAULT SYSDATE,把匹配逻辑改成:

AND TRUNC(bab.bill_date, 'MM') = TRUNC(ADD_MONTHS(p_stat_date, -1), 'MM')

默认还是统计上个月,传其他日期就统计对应日期的上个月数据,适配性更强。

内容的提问来源于stack exchange,提问作者vitaminJava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:09:05