В чем разница между маской даты oracle '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')
возвращает разные результаты
Решение
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 мы находимся в текущем году,...