В чем разница между маской даты 'yy' и 'rr'? - PullRequest
22 голосов
/ 21 августа 2008

Пример:

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')

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

Ответы [ 6 ]

37 голосов
/ 21 августа 2008

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. YYYY принимает 4-значные входы, но не сделать любое преобразование даты

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

5 голосов
/ 21 августа 2008

@ Майкл Стум

Мой последний опыт работы с Oracle немного давным-давно

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

...

yy всегда будет считать 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 

/ * т.пл. 1022 *

4 голосов
/ 21 августа 2008

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

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

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

/ * тр * 1012

1 голос
/ 21 апреля 2011

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

0 голосов
/ 23 декабря 2015

О RRRRR

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

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

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

О YY или YYYY

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

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

0 голосов
/ 25 июня 2009

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

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