ORACLE 查找给定季度的第一天和最后一天

Gio*_*gos 0 sql oracle

有没有办法找到给定季度的第一天和最后一天?

如果我选择第一季度,那么我应该能够获得第一季度的第一天和最后一天

例子:

quarter = 1年份是2016。预期结果是01/01/2016- 31/03/2007DD/MM/YYYY格式)。

例如:

select(quarterdatestart, quarterdatedate) where year = 2016 and quarter = 1;
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 5

trunc( sysdate, 'Q' )
Run Code Online (Sandbox Code Playgroud)

将为您提供当前季度的第一天。

trunc( add_months(date '0001-01-01', (y-1)*12 + (q-1)*3), 'Q' ) 
Run Code Online (Sandbox Code Playgroud)

q将为您提供一年中季度的第一天y。使用不同的年份和季度值调用此示例

with x as (
  select 2016 y, 1 q from dual union all
  select 2016, 2 from dual union all
  select 2015, 4 from dual
)
select trunc( add_months(date '0001-01-01', (y-1)*12 + (q-1)*3), 'Q' ) 
  from x
Run Code Online (Sandbox Code Playgroud)

要获得该季度最后一天的午夜,只需添加三个月并减去一天

<<first day of quarter>> + interval '3' month - interval '1' day
Run Code Online (Sandbox Code Playgroud)

或者

add_months(<<first day of quarter>>, 3) - 1
Run Code Online (Sandbox Code Playgroud)

我通常发现间隔语法更具表现力,但旧语法更紧凑。

如果您想要季度的最后一个日期(季度最后一天的 23:59:59),只需减去 1 秒而不是 1 天。