오라클에서 날짜는 어떻게 저장됩니까?
오라클에서 날짜는 어떻게 저장됩니까?예를 들어 대부분의 시스템은 Epoch 시간을 사용하여 시간을 결정합니다.1970년 1월 1일로부터 몇 초 거리에 있는지 계산함으로써.Oracle도 이 기능을 수행합니까?
제가 이 질문을 하는 이유는 오라클에서 날짜를 두 개 빼고 나면 며칠 사이에 부동소수점을 얻을 수 있다는 것을 알게 되었기 때문입니다.
예
(Sysdate - dateColumn)
(시간에 따라) 이런 것을 반환할 것입니다.
3.32453703703703703703703703703703703704
이제 Oracle은 변환을 수행하여 해당 형식을 삭제하고 있습니까? 아니면 Oracle은 특정 기간에서 며칠이 지난 날짜를 저장합니까?(Epoch time처럼)
12번과 13번 두 종류가 있습니다.
http://oraclesniplets.tumblr.com/post/1179958393/my-oracle-support-oracle-database-69028-1
13식
select dump(sysdate) from dual;
Typ=13 Len=8: 220,7,11,26,16,41,9,0
The format of the date datatype is
Byte 1 - Base 256 year modifier : 220
2 - Base 256 year : 256 * 7 = 1792 + 220 = 2012
3 - Month : 11
4 - Day : 26
5 - Hours : 16
6 - Minutes : 41
7 - Seconds : 09
8 - Unused
2012-11-26 16:41:09
12식
select dump(begindate) from tab;
Typ=12 Len=7: 100,112,2,7,1,1,1
The format of the date datatype is
byte 1 - century (excess 100) 100 - 100 = 00
byte 2 - year (excess 100) 112 - 100 = 12
byte 3 - month = 2
byte 4 - day = 7
byte 5 - hour (excess 1) 1 - 1 = 0
byte 6 - minute (excess 1) 1 - 1 = 0
byte 7 - seconds (excess 1) 1 - 1 = 0
0012-02-07 00:00:00
http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#sthref151 의 설명서에서 확인할 수 있습니다.
각 DATE 값에 대해 Oracle은 년, 월, 일, 시, 분 및 초의 정보를 저장합니다.
따라서 설명서의 이 장에서도 확인할 수 있는 에포크 값이 저장되지 않은 것으로 보입니다.
데이터베이스는 내부적으로 날짜를 숫자로 저장합니다.날짜는 세기, 연도, 월, 일, 시간, 분 및 초에 해당하는 7바이트의 고정 길이 필드에 저장됩니다.
오라클에서 날짜는 어떻게 저장됩니까?
두 가지 데이터 유형 12
그리고.13
두 가지 목적이 있습니다.
- 유형 12 - 테이블에 저장된 날짜
- 유형 13 - 다음과 같은 내부 날짜 함수에 의해 반환된 날짜
SYSDATE
/CURRENT_DATE
또한 문자열 리터럴을 사용하여 날짜로 변환할 때TO_DATE
또는 ANSI 날짜 리터럴DATE 'YYYY-MM-DD'
.
테스트 사례:
유형 12에 대한 기본 테이블 설정:
SQL> CREATE TABLE t(col DATE);
Table created.
SQL> INSERT INTO t SELECT SYSDATE FROM dual;
1 row created.
SQL> COMMIT;
Commit complete.
다양한 사례를 확인합니다.
SQL> SELECT DUMP(col) FROM t;
DUMP(COL)
--------------------------------------------------------------------------------
Typ=12 Len=7: 120,116,3,17,18,6,55
SQL> SELECT DUMP(SYSDATE) FROM dual;
DUMP(SYSDATE)
--------------------------------------------------------------------------------
Typ=13 Len=8: 224,7,3,17,17,5,54,0
SQL> SELECT DUMP(CURRENT_DATE) FROM dual;
DUMP(CURRENT_DATE)
--------------------------------------------------------------------------------
Typ=13 Len=8: 224,7,3,17,17,14,20,0
SQL> SELECT DUMP(TO_DATE('17-DEC-1980 12:12:12','DD-MON-YYYY HH24:MI:SS')) FROM dual;
DUMP(TO_DATE('17-DEC-198012:12:12','
------------------------------------
Typ=13 Len=8: 188,7,12,17,12,12,12,0
TO_DATE와 마찬가지로 ANSI Date 리터럴 사용:
SQL> SELECT DUMP(DATE '2016-03-17') FROM dual;
DUMP(DATE'2016-03-17')
--------------------------------
Typ=13 Len=8: 224,7,3,17,0,0,0,0
SQL> INSERT INTO t SELECT to_date('17-DEC-1980 12:13:14','DD-MON-YYYY HH24:MI:SS') FROM dual;
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT DUMP(col) FROM t;
DUMP(COL)
--------------------------------------------------------------------------------
Typ=12 Len=7: 120,116,3,17,18,6,55
Typ=12 Len=7: 119,180,12,17,13,14,15
SQL>
보시다시피 날짜를 표에 저장하는 동안 유형 12를 사용합니다.두 번째 유형 13은 날짜 함수를 사용하여 문자열 리터럴을 날짜로 변환하거나 내부 날짜에 의해 반환된 날짜가 다음과 같은 기능을 할 때 사용됩니다.SYSDATE
/CURRENT_DATE
.
언급URL : https://stackoverflow.com/questions/13568193/how-are-dates-stored-in-oracle
'source' 카테고리의 다른 글
What's the difference between "squash" and "fixup" in Git/Git Extension? (0) | 2023.06.26 |
---|---|
Spring Boot에서 Heroku Postgres에 연결 (0) | 2023.06.26 |
하위 쿼리 문제별 Oracle SQL 순서 지정! (0) | 2023.06.26 |
ASP.NET에서 XML을 반환하는 방법은 무엇입니까? (0) | 2023.06.26 |
SQL Server에서 날짜 시간에서 밀리초 제거 (0) | 2023.06.26 |