2013년 8월 9일 금요일

[oraclejava community, oracle 강좌,oracle교육,구로디지털오라클]oracle date type

----------
Date Type
----------

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



1. 날짜를 가르키는 값을 Tanle에 저장. 세기를 포함하여 년,월,일시,분,초,등을 저장한다.

2. BC 4712년1월1일부터 AD 4712년 12월31일까지의 날자형식을 저장할수 있다.

3. 7 Byte의 고정길이 Column임.

4. Oracle의 기본날자 형식은 dd-mon-yy, NLS_DATE_FORMAT Parameter를 이용하여 기본형식을 변경할수 있다. 또는 Alter Session Command를 이용하여 해당 sssion기간동안 날자형식을 변경할수도 있다.

5. 표준 Oracle날자 형식이 아닌 형식의 입력을 위해서는 to_date 함수를 이용한다. to_date(‘november 13, 1992’,’month dd, yyyy’)

6. Oracle에서 시간은 24시간 형식(HH:MI:SS)으로 저장한다. 기본적으로 날자 Column의 시간을 입력하지 않은 경우 12:00:00 AM(자정)으로 저장된다. 만약 시간만 입력되면 해당월의 1일이 입력된다. Date의 time부분을 입력하려면 반드시 TO_DATE함수와 format mask를 이용해야 한다.

7.기본적으로 일자나 연산이 빈번히 경우 DATE 타입으로 가져가는 것이 효과적일 수 있지만 시간이 정상적으로 입력된 경우 일자를 '=' 연산으로 비교할 수가 없다. 예를 들면 아래와 같다.

INSERT INTO EMP (EMPNO,ENAME,HIREDATE,DEPTNO)
        VALUES (7777,'BJKIM',TO_DATE('94/03/15 03:20:30','YY/MM/DD HH:MI:SS');

  와 같이 정상적으로 날짜를 입력한후

  SELECT * FROM EMP WHERE HIREDATE = '15-MAR-94';

  을 수행 하더라도 원하는 결과를 도출할 수 없다. 뿐만 아니라 LIKE, SUBSTR등의 함수를
이용하여 스트링(string) 비교를 하고자 할때 제한적으로 밖에 사용할 수 없다. 즉 디폴트
날짜 형태를 기준으로만 비교 가능하다.

예 ) 81년에 입사한 인원을 찾고자 할때

      a.SELECT * FROM EMP WHERE HIREDATE LIKE '%81';
      혹은
      b.SELECT * FROM EMP WHERE SUBSTR(HIREDATE,8,2) = '81';
 
  와 같이 SQL문을 날짜 타입의 기본 형태인 'DD-MON-YY'을 기준으로 스트링 함수를 사용하여야 한다.

예 ) 만일 HIREDATE에 인덱스가 생성 되어 있을때 아래 2가지 SQL문을 수행하게 되면 a의 경우는 인덱스를 사용하지만 b의 경우에는 인덱스를 사용 못하는 일반적
인 문자 타입과의 차이점을 보인다.

SELECT * FROM EMP
WHERE HIREDATE1 = '01-MAR-81';

SELECT * FROM EMP
WHERE HIREDATE1 BETWEEN '01-JAN-81' AND '31-DEC-81';

의 경우는 내부적으로 비교되는 값에서 투데이트 함수를 이용하여 처리를 하지만
의 경우 컬럼 부분이 TO_CHAR을 이용하여 변동되기 때문에 인덱스를 사용할 수 없
다.이와 같은 사항을 주의하여 쿼리문을 수행하여야 한다. 결론적으로 자주 조건절
에 사용되거나, 데이트 연산 기록(logging), 타임 스탬프로 사용되는 컬럼을 제
외하고는 효과적인 수행을 위해 문자  타입 적용을 고려하는 것이 효과적이다.


댓글 없음:

댓글 쓰기