Подтвердить что ты не робот

В чем разница между "YYYY" и "RRRR" в Oracle SQL

У меня есть 2 запроса в SQL:

select trunc(to_date('27-Jul-1987'),'YYYY') FROM dual; 

и

select trunc(to_date('27-Jul-1987'),'RRRR') FROM dual; 

Оба дают мне тот же результат. В чем разница между "RRRR" и "YYYY"?

4b9b3361

Ответ 1

YYYY дает текущий год как 4 цифры.

RRRR формат означает, что двузначные годы в диапазоне от 00 до 49 считаются находящимися в текущем столетии (т.е. имеют те же первые две цифры, что и текущий год), и годы, указанные как 50 через 99 считаются в предыдущем столетии.

Ответ 2

Это:

SQL> select  to_char(to_date('72-01-01','rrrr-mm-dd'),'yyyy') from dual;

предоставит вам:

тысяча девятьсот семьдесят два

Но это:

SQL> select  to_char(to_date('72-01-01','yyyy-mm-dd'),'yyyy') from dual;

предоставит вам:

0072

Ответ 3

Если первые две цифры за год не указаны в дату, которую нужно преобразовать:

  • ГГГГ всегда будет возвращать текущий год.
  • RRRR возвращает год в зависимости от текущего указанного года в базе данных.

Попробуйте этот пример кода:

SELECT TO_DATE ('010199', 'MMDDYYYY') AS date_a,
       TO_DATE ('010199', 'MMDDYY') AS date_b,
       TO_DATE ('010199', 'MMDDRR') AS date_c,
       TO_DATE ('010199', 'MMDDRRRR') AS date_d
  FROM DUAL;

Результаты при запуске 12/01/2014:

 DATE_A       DATE_B       DATE_C        DATE_D   
 ---------    ---------    ---------     ---------  
 1/1/0099      1/1/2099     1/1/1999      1/1/1999

Ссылка orale дает отличное описание и примеры.

Из приведенного выше ссылка:

  • Если указанный двузначный год составляет от 00 до 49, тогда
    • Если последние две цифры текущего года составляют от 00 до 49, тогда возвращенный год имеет те же первые две цифры, что и в текущем году.
    • Если последние две цифры текущего года составляют от 50 до 99, первые две цифры возвращенного года на 1 больше, чем первые 2 цифры текущего года.
  • Если указанный двузначный год составляет от 50 до 99, тогда
    • Если последние две цифры текущего года от 00 до 49, то первые 2 цифры возвращенного года на 1 меньше первых двух цифр текущего года.
    • Если последние две цифры текущего года составляют от 50 до 99, тогда возвращенный год имеет те же первые две цифры, что и в текущем году.