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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.21 16:16:02