Вы можете преобразовать компонент лет вашего периода в начало года, используя:
TO_DATE( SUBSTR( period, 1, 4 ) || '0101', 'YYYYMMDD' )
Затем вы можете добавить 3 месяца для каждого квартала после первого использования:
ADD_MONTHS(
TO_DATE( SUBSTR( period, 1, 4 ) || '0101', 'YYYYMMDD' ),
3 * ( SUBSTR( period, 6, 1 ) - 1 )
)
Затем вы можете использовать MONTHS_BETWEEN
, чтобы найти разницу между датами, и разделить на 3, чтобы получить разницу в количестве кварталов.
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE table_name ( period ) AS
SELECT '2005-4' FROM DUAL UNION ALL
SELECT '2004-2' FROM DUAL;
Запрос 1 :
SELECT MIN( period ) || ' - ' || MAX( period ) AS range,
MONTHS_BETWEEN( MAX( period_start ), MIN( period_start ) ) / 3
AS quarters_difference
FROM (
SELECT period,
ADD_MONTHS(
TO_DATE( SUBSTR( period, 1, 4 ) || '0101', 'YYYYMMDD' ),
3 * ( SUBSTR( period, 6, 1 ) - 1 )
) period_start
FROM table_name
)
Результаты
| RANGE | QUARTERS_DIFFERENCE |
|-----------------|---------------------|
| 2004-2 - 2005-4 | 6 |