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

StackOverflow https://stackoverflow.com/questions/19058

  •  09-06-2019
  •  | 
  •  

Вопрос

Пример:

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

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

Это было полезно?

Решение

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 года :-)

Другие советы

@Майкл Стам

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

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

...

Всегда ли 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 

/мп

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

видишь: http://www.oradev.com/oracle_date_format.jsp

Редактировать:черт! майкл "быстрые пальцы" стам опереди меня в этом!

/мп

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

О RR или RRRRR

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

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

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

О ГГ или ГГГГ

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top