sql - 甲骨文 - 将日期分成几个季度

标签 sql oracle plsql

给定 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/

相关文章:

php - 如何在sql中获取下一行

sql - 在Oracle sql中将IPv4地址拆分为4个数字

Oracle:合并相当于插入所有?

sql - SQL Server 2008中合并语句错误

mysql - 根据一根金条的定价获取一个人的支出总和

sql - 对每 n 个和组上的 SQL 行求和

c# - PLS-00306 : wrong number or types of arguments when calling oracle function

sql - 按字符串长度排序,然后按 pl sql 中的单个字母 desc 排序

oracle - 将 Oracle 游标行转换为管道函数的用户定义记录类型

stored-procedures - PL/SQL : Passing lexical parameter to a stored procedure