You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle中如何获取当前季度的首日与末日期?

获取当前季度的首日与末日期(Oracle SQL)

嘿,这事儿简单,我帮你把获取当前季度首尾日期的SQL捋清楚~

  • 当前季度首日
    你给出的示例思路是对的,不过可以简化一点。TRUNC(SYSDATE, 'Q')这个函数会直接把当前日期截断到所在季度的第一天(比如3月的话就是3月1日,7月的话就是7月1日),再用TO_CHAR()转成你需要的DD/MM/YYYY格式就搞定了。优化后的语句是:

    SELECT TO_CHAR(TRUNC(SYSDATE, 'Q'), 'DD/MM/YYYY') AS current_quarter_start FROM dual;
    

    你原来示例里的ADD_MONTHS(..., 0)其实没必要,因为加0个月不会改变原日期,直接用TRUNC的结果就好。

  • 当前季度末日
    要拿到季度最后一天,我们可以先算出下一个季度的第一天,再往前推1天。具体来说,给季度首日加3个月得到下季度第一天,再减1天就是当前季度的最后一天了。完整语句如下:

    SELECT TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'Q'), 3) - 1, 'DD/MM/YYYY') AS current_quarter_end FROM dual;
    

如果想一次性查出首尾日期,把两个字段放一起就行:

SELECT 
    TO_CHAR(TRUNC(SYSDATE, 'Q'), 'DD/MM/YYYY') AS current_quarter_start,
    TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'Q'), 3) - 1, 'DD/MM/YYYY') AS current_quarter_end
FROM dual;

要是你需要的是日期类型而非字符串,去掉TO_CHAR()转换就行,直接保留原日期格式:

SELECT 
    TRUNC(SYSDATE, 'Q') AS current_quarter_start,
    ADD_MONTHS(TRUNC(SYSDATE, 'Q'), 3) - 1 AS current_quarter_end
FROM dual;

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

火山引擎 最新活动