TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-16 |
제목 | DATE 타입의 내부 표현 방식 (INTERNAL REPRESENTATION OF DATE TYPE | ||
---|---|---|---|
DATE 타입의 내부 표현 방식
(INTERNAL REPRESENTATION OF DATE TYPE) ====================================== 자료 타입중 DATE는 7바이트로 표현되며, 각 바이트의 구성 형식은 다음과 같습니다. ㅇ DATE 타입의 구성 => 년도(2 바이트) + 월/일(각 1 바이트) + 시/분/초(각 1 바이트) 이중 년도는 100년 이상의 부분과 100년 미만의 부분으로 분리되어 각 1바이트 씩으로 기록되며, 각 부분은 기본값(base value)에 차이를 더하여(또는 기원전 년도의 경우 감하여)은 다음과 같이 16진수로 표현됩니다. (바이트 1-2) 년도 : 0x64 0x64 -> 100년 이상의 단위는 1번 바이트에, 미만의 단위는 2번 바이트에 기록 (바이트 3-4) 월/일 : 0x00 0x00 -> 월은 3번 바이트에, 일은 4번 바이트에 기록 (바이트 5-7) 시/분/초: 0x01 0x01 0x01 -> 시는 5번 바이트에, 분은 6번 바이트에, 초는 7번 바이트에 기록 이중 주의할 사항은 1. 년도의 경우 100(16진수로 64)을 기준으로 하여 기원전은 100에서 감한 값을 표현하고, (예를 들어, 기원전 10년은 16진수로 '64 5A', 기원전 100년은 '63 64'로 표현) 2. 시/분/초의 기본값은 "00 00 00"이 아닌 "01 01 01"이란 점입니다. 예를 들어 "1999년 2월 23일 01시 10분 20초"는 다음과 같이 표현됩니다. ㅇ 19(00) 년 => 64 + 13(19의 16진수 표현) => 77 ㅇ 99 년 => 64 + 63(99의 16진수 표현) => C7 ㅇ 02 월 => 00 + 02(12의 16진수 표현) => 02 ㅇ 23 일 => 00 + 17(23의 16진수 표현) => 17 ㅇ 01 시 => 01 + 01(01의 16진수 표현) => 02 ㅇ 10 분 => 01 + 0A(10의 16진수 표현) => 0B ㅇ 20 초 => 01 + 14(20의 16진수 표현) => 15 실례를 들면, SQL> alter session set nls_date_format = 'SYYYY/MM/DD HH24:MI:SS'; SQL> insert into date_internal values ('1999/2/23 1:10:20'); SQL> select * from date_internal; A ---------------------------------------- 1999/02/23 01:10:20 SQL> select dump(a, 16) from date_internal; DUMP(A,16) --------------------------------------------------------------------- Typ=12 Len=7: 77,c7,2,17,2,b,15 참고로 DATE 타입의 표현범위는 다음과 같이 기원전 4712년 부터 9999년 까지이며, 만일 허용 범위를 벗어나면 ORA-1841, "(full) year must be between -4713 and +9999, and not be 0" 오류가 발생합니다. "-4712/01/01 00:00:00" ~ "9999/12/31 23:59:59" 추가로 몇가지 예제 표현을 소개합니다. SQL> select a, dump(a,16) "B" from date_internal; A B ------------------------- ---------------------------------------- -4712/01/01 00:00:00 Typ=12 Len=7: 35,58,1,1,1,1,1 -0100/01/01 00:00:00 Typ=12 Len=7: 63,64,1,1,1,1,1 -0001/01/01 00:00:00 Typ=12 Len=7: 64,63,1,1,1,1,1 0001/01/01 00:00:00 Typ=12 Len=7: 64,65,1,1,1,1,1 1999/02/23 01:10:20 Typ=12 Len=7: 77,c7,2,17,2,b,15 9999/12/31 23:59:59 Typ=12 Len=7: c7,c7,c,1f,18,3c,3c |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |