2015-09-17 4 views
1

Как мы узнаем, имеет ли данный двухзначный код года (YY) 19XX или 20XX? Например, если мы наберем 07-apr-10, то будет 10 год 1910 или 2010?oracle 11g date function related -

+0

http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF51062 и http://docs.oracle.com/cd/E11882_01/server .112/e10729/ch3globenv.htm # NLSPG202 и http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements004.htm#SQLRF51076 –

+1

Вы никогда не узнаете наверняка. Получите того, кто предоставил вам данные, чтобы они были явными. – Ben

+0

Я с Беном здесь. 07-apr-10 также может означать 07-apr-1710 в зависимости от контекста. Это не имеет никакого отношения к базам данных. Итак, да, спросите ту, для которой вы даете даты, для правил о том, как интерпретировать даты. –

ответ

0

РЕДАКТИРОВАТЬ: Извините, что мой клиент установил только YY. После добавления YYYY я получаю результаты ниже. Так выглядит по умолчанию YY принимает 20YY

select to_date('7/10/15','DD/MM/YY') from dual; 
07-OCT-2015 

select to_date('7/10/15','DD/MM/YYYY') from dual; 
07-OCT-0015 
+0

Они могут быть не такими же, потому что ваш клиент SQL скрывает от вас весь год, поэтому вы не можете сказать, одинаковы ли они. –

+0

Повторим эксперимент с экстрактом (год от to_date()) – borjab

+0

Да. Виноват. Я изменил настройку. Второй запрос задает год как 0015. Редактирование ответа. Спасибо за подсказку с клиентом. – Utsav

0

Чтобы проверить это:

Прежде всего, вам нужно преобразовать CHAR с форматом YY года в дату:

TO_DATE('20-01-15','DD-MM-YY'); 

и после этого немедленно преобразуйте его обратно в CHAR и см. вывод, как показано ниже:

SELECT TO_CHAR(TO_DATE('20-01-15','DD-MM-YY'),'YYYY') FROM DUAL;
+0

вы ...: -) @ Andrei Amarfia –

1

Вообще говоря, вы должны быть u петь RR datetime format element, чтобы преобразовать двузначные годы в полные годы.

Если указанный две цифры года от 00 до 49, а затем

  • Если последние две цифры текущего года являются 00 до 49, то возвращаемая год имеет те же первые две цифры, как в текущем году.
  • Если последние две цифры текущего года составляют от 50 до 99, то первые 2 цифры возвращенного года на 1 больше, чем первые 2 цифры текущего года.

Если указанный двузначный год составляет от 50 до 99, а затем

  • Если последние две цифры текущего года являются 00 до 49, то первые 2 цифры возвращенного года являются: 1 меньше первых двух цифр текущего года.
  • Если последние две цифры текущего года составляют от 50 до 99, тогда возвращенный год имеет те же первые две цифры, что и в текущем году.

Я не думаю, что вы хотите YY, так как она всегда заполняет недостающие цифры с единицами из текущего года. Например:

SELECT TO_CHAR(TO_DATE('98', 'YY'), 'YYYY') FROM dual; -- returns 2098, not 1998 
SELECT TO_CHAR(TO_DATE('9', 'Y'), 'YYYY') FROM dual; -- returns 2019 
SELECT TO_CHAR(TO_DATE('98', 'RR'), 'YYYY') FROM dual; -- returns 1998 (until we get to 2050) 
+0

вы .... @ Stuart Caie –