В чем разница между маской даты 'yy' и 'rr'?

Пример:

select ename from emp where hiredate = todate('01/05/81','dd/mm/yy')

и

select ename from emp where hiredate = todate('01/05/81','dd/mm/rr')

вернуть разные результаты

20.08.2008 23:07:51
6 ОТВЕТОВ
РЕШЕНИЕ

http://oracle.ittoolbox.com/groups/technical-functional/oracle-dev-l/difference-between-yyyy-and-rrrr-format-519525

YY позволяет получить только две цифры года, например, 99 в 1999 году. Остальные цифры (19) автоматически присваиваются текущему столетию. RR преобразует двузначные годы в четырехзначные годы путем округления.

50-99 хранятся как 1950-1999, а даты, заканчивающиеся на 00-49, хранятся как 2000-2049. RRRR принимает четырехзначный ввод (хотя и не требуется) и преобразует двузначные даты, как RR. ГГГГ принимает 4-значные вводы, но не конвертирует даты

По сути, ваш первый пример будет предполагать, что 81 - это 2081, тогда как RR предполагает 1981. Поэтому первый пример не должен возвращать никаких строк, поскольку вы, скорее всего, еще не нанимали парней после 1 мая 2081 года :-)

39
20.08.2008 23:11:32

совместимость с y2k. rr предполагает, что 01 будет 2001, yy предполагает, что 01 будет 1901

см .: http://www.oradev.com/oracle_date_format.jsp

редактировать: черт! Майкл "Quickfingers" Stum избили меня к этому !

/ тр

4
23.05.2017 12:34:30

@ Майкл Стум

Мой последний опыт работы с Oracle произошел довольно давно

хм, это было до 2000 года? :п

...

Всегда ли ты примешь 19xx?

Согласно вашему источнику , мы получаем следующие сценарии:

USING
ENTERED
STORED
SELECT of date column


YY
22-FEB-01
22-FEB-1901
22-FEB-01


YYYY
22-FEB-01
22-FEB-0001
22-FEB-0001


RR
22-FEB-01
22-FEB-2001
22-FEB-01


RRRR
22-FEB-01
22-FEB-2001
22-FEB-2001 

/ тр

5
23.05.2017 12:02:37

RR означает после 1990 года, а yy предполагает 90 как 2090 .... как мы находимся в текущем году, ...

-1
25.06.2009 07:00:23
Нет ... rrотличается в зависимости от того, вы до 50-го года века или нет.
Ben 18.11.2012 18:10:12

RR отображает четыре цифры как 1999 или 2015 (если это <49, то это будет 20-й век)

1
21.04.2011 05:54:05

О RR или RRRR

Когда мы вставляем даты с 2-значными годами (т. Е. 09 / октябрь / 15), Oracle может изменить столетия автоматически, поэтому решение состоит из 4-значных дат. Но 4-значная версия была введена в некоторых последних версиях, поэтому решения для этой проблемы в более ранних версиях были RRили RRRR. Но обратите внимание, что это работает только с TO_DATE()функцией, но не с TO_CHAR()функцией.

Всякий раз, когда вставки / обновления выполняются по датам, мы всегда должны уточнять текущую дату, отображаемую в часах, в связи с переводом даты, поскольку Oracle выполняет каждый перевод даты, связываясь с сервером.

Чтобы сохранить согласованность между веками, всегда лучше выполнить перевод даты с 4-значными годами.

О YY или YYYY

Он принимает даты, но не имеет функции для автоматического изменения.

Это изображение показывает поведение при вставке даты с двумя цифрами (например, 09 / октябрь / 15)

0
5.04.2018 16:30:48