완전 초보 질문입니다... 1 5 5,062

by 팔오 [2013.03.18 16:34:35]



강좌를 보면서 공부중인데...

select to_char(sysdate, 'yyyy-mm-dd')
, to_char(sysdate, 'rrrr-mm-dd')
  from dual

두 가지 모두 결과값이 같습니다..
yyyy 와 rrrr의 차이점을 알고 싶습니다..
by 약쟁이총각 [2013.03.18 17:48:32]

밀레니엄 버그 땜시 나온것이 rrrr 이라고 하네요..

보니 년도를 두자리 수만 쓰는 경우 1990 년이랑 2090년을 비교할 때 rr은 1990년을 의미 yy는 2090년을 의미 한다네요..


by 약쟁이총각 [2013.03.18 17:56:06]

============== 예시 ==============
sys@SQL > select to_char(to_date('90-10-10','rr-mm-dd'),'yyyymmdd') from dual;

TO_CHAR(
--------
19901010

sys@SQL > select to_char(to_date('90-10-10','yy-mm-dd'),'yyyymmdd') from dual;

TO_CHAR(
--------
20901010


by 약쟁이총각 [2013.03.18 18:00:30]

일단 2000년만 넘겨보기 위해서 임시방편으로 만든것으로 RR은 0~49년, 50~99년 으로 분류해서 세기를 2개의 단위로 나누는데요.
현재 날짜와 처리날짜가 똑같이 0~49이거나 50~99이면 해당 세기를 그대로 처리하지만, 현재는 0~49이고, 처리날짜는 50~99이면 현재의 시기에서 100년을 빼서 처리하구요, 현재는 50~99이고, 처리날짜는 00~49이면 현재 시기에서 100년을 더해서 처리해 준다네요


by 마농 [2013.03.18 18:00:45]
-- Date 로부터 TO_CHAR 를 이용해 년도를 뽑을 때는 yyyy, rrrr 모두 년도 4자리로 동일합니다.
-- 문자열로부터 TO_DATE 를 이용해 Date 로 변형할때도 동일합니다.
-- yy, rr 과 같이 2자리만 설정할 경우엔 차이가 있습니다.
-- Date 로부터 TO_CHAR 를 이용해 년도를 뽑을 때는 yy, rr 모두 년도 2자리로 동일합니다.
-- 문자열로부터 TO_DATE 를 이용해 Date 로 변형할때는 다릅니다.
-- yy(00~99) : 2000년대(21세기, 현재 세기)
-- rr(00~49) : 2000년대(21세기, 현재 세기)
-- rr(50~99) : 1900년대(20세기, 직전 세기)
SELECT TO_DATE('00.01', 'yy.mm') --> '2000.01'
     , TO_DATE('49.01', 'yy.mm') --> '2049.01'
     , TO_DATE('50.01', 'yy.mm') --> '2050.01'
     , TO_DATE('99.01', 'yy.mm') --> '2099.01'
     , TO_DATE('00.01', 'rr.mm') --> '2000.01'
     , TO_DATE('49.01', 'rr.mm') --> '2049.01'
     , TO_DATE('50.01', 'rr.mm') --> '1950.01'
     , TO_DATE('99.01', 'rr.mm') --> '1999.01'
  FROM dual
;

by 팔오 [2013.03.18 18:11:21]

약쟁이총각님, 마농님 좋은 답변 감사합니다~
많은 도움 됐습니다~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입