これにより、最も近い四半期が得られます。
select sysdate,
trunc(sysdate,'mi') - --truncate to the nearest minute
numtodsinterval( --convert the minutes in number to interval type and subtract.
mod(to_char(sysdate,'mi'),15), --find the minutes from the nearest quarter
'minute'
) as nearest_quarter
from dual;
出力:
sysdate nearest_quarter
-----------------------------------------------------------------
October, 11 2013 05:54:24+0000 October, 11 2013 05:45:00+0000
October, 11 2013 05:22:24+0000 October, 11 2013 05:15:00+0000
これを開始値として使用してから、これを繰り返します。
with cte as(
select trunc(sysdate,'mi') -
numtodsinterval(mod(to_char(sysdate,'mi'),15),'minute') as nearest_quarter
from dual
)
select nearest_quarter - numtodsinterval((level - 1)*15, 'minute'),
nearest_quarter - numtodsinterval((level - 2)*15, 'minute')
from cte
connect by level <= 10;
デモ 。