有没有办法找到给定季度的第一天和最后一天?
如果我选择第一季度,那么我应该能够获得第一季度的第一天和最后一天
例子:
quarter = 1年份是2016。预期结果是01/01/2016- 31/03/2007(DD/MM/YYYY格式)。
例如:
select(quarterdatestart, quarterdatedate) where year = 2016 and quarter = 1;
Run Code Online (Sandbox Code Playgroud)
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 天。