Oracle SQL如何按规则获取输入日期对应月份的第一天
Oracle SQL 按规则返回账期起止日期
逻辑说明
- 传入任意日期,先判断月份是否为11月:是则返回当年11月1日作为账期起始日
- 非11月的日期,直接返回传入日期所在月的1日作为账期起始日
- 账期结束日统一取账期起始日所在月份的最后一天
核心SQL代码
将代码中的:input_date替换为实际传入的日期参数、或表中的日期字段即可直接使用:
SELECT -- 计算账期起始日 Startinvoice CASE WHEN TO_CHAR(:input_date, 'MM') = '11' THEN TRUNC(:input_date, 'YYYY') + INTERVAL '10' MONTH -- 直接定位当年11月1日,避免字符串拼接的格式问题 ELSE TRUNC(:input_date, 'MM') -- 非11月返回当月第一天 END AS startinvoice, -- 计算账期结束日 Endinvoice LAST_DAY( CASE WHEN TO_CHAR(:input_date, 'MM') = '11' THEN TRUNC(:input_date, 'YYYY') + INTERVAL '10' MONTH ELSE TRUNC(:input_date, 'MM') END ) AS endinvoice FROM dual
注:如果业务场景中10月的startbilldate已经预先生成为当月1日,可以直接在10月时复用该字段值,不需要重复计算,最终返回结果和上述逻辑完全一致。
场景验证结果
- 传入2021年10月任意日期:startinvoice返回
2021-10-01,endinvoice返回2021-10-31,和startbilldate取值对齐 - 传入2021年11月任意日期:startinvoice返回
2021-11-01,endinvoice返回2021-11-30 - 传入2021年12月、2022年1-10月等其他任意月份日期:startinvoice返回对应月份1日,endinvoice返回对应月份最后一天
内容的提问来源于stack exchange,提问作者Riyan Pratama
相关产品推荐
相关产品推荐

