给定 2 个日期(StartDate 和 EndDate),如何在 Pl/SQL 中生成季度。
例子:
Start Date: 01-JAN-2009
End Date: 31-DEC-2009
预期输出:
StartDate EndDate
01-JAN-2009 31-MAR-2009
01-APR-2009 30-JUN-2009
01-JUL-2009 30-SEP-2009
01-OCT-2009 31-DEC-2009
最佳答案
SELECT ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL-1) ) AS qstart
, ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1 AS qend
FROM ( SELECT TO_DATE('&start_date') AS start_date
, TO_DATE('&end_date') AS end_date
FROM DUAL
) PARAM
CONNECT BY ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1
<= PARAM.end_date
参数规则,您可能需要调整查询以适合您的目的:
- 如果 start_date 不是精确的季度开始,它会有效地使用包含开始日期的季度。
- 如果 end_date 不是确切的季末,那么我们将在 end_date 之前结束的季度结束(不是包含结束日期的季度)。
关于sql - 甲骨文 - 将日期分成几个季度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558492/