В чем разница между YYYY и RRRR в Oracle SQL - PullRequest
14 голосов
/ 25 июля 2011

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

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

и

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

Оба дают мне одинаковый результат. В чем разница между «RRRR» и «YYYY»?

Ответы [ 3 ]

28 голосов
/ 25 июля 2011

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

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

6 голосов
/ 01 декабря 2014

Если первые 2 цифры года не указаны в конвертируемой дате:

  • ГГГГ всегда будет возвращать текущий год.
  • 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;

Результаты при запуске 01.12.2014:

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

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

Из вышеуказанного ссылка :

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

Это:

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

даст вам:

1972

Но это:

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

даст вам:

0072
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...