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




