У меня есть 2 запроса в SQL:
select trunc(to_date('27-Jul-1987'),'YYYY') FROM dual;
и
select trunc(to_date('27-Jul-1987'),'RRRR') FROM dual;
Оба дают мне тот же результат. В чем разница между "RRRR" и "YYYY"?
У меня есть 2 запроса в SQL:
select trunc(to_date('27-Jul-1987'),'YYYY') FROM dual;
и
select trunc(to_date('27-Jul-1987'),'RRRR') FROM dual;
Оба дают мне тот же результат. В чем разница между "RRRR" и "YYYY"?
YYYY
дает текущий год как 4 цифры.
RRRR
формат означает, что двузначные годы в диапазоне от 00
до 49
считаются находящимися в текущем столетии (т.е. имеют те же первые две цифры, что и текущий год), и годы, указанные как 50
через 99
считаются в предыдущем столетии.
Это:
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
Если первые две цифры за год не указаны в дату, которую нужно преобразовать:
Попробуйте этот пример кода:
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, тогда возвращенный год имеет те же первые две цифры, что и в текущем году.