ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle(2022.02.09) -날짜자료,기타자료형
    데이터베이스 2022. 2. 9. 20:12
    728x90

    3. 날짜 자료
      -오라클에서 제공되는 날짜 자료형은 date, timestamp 타입이 존재
      -날짜자료는 '+', '-'연산의 대상이 됨 (곱셈,나눗셈은 실행X)
      -날짜형 자료들의 뺄셈 결과는 두 날짜사이의 일수 반환
      1) DATE
      -표준 날짜자료형
      -년,월,일,시,분,초
      (사용형식)
      컬럼명 DATE

    사용예)
      CREATE TABLE TEMP06(
      COL1 DATE,
      COL2 DATE,
      COL3 DATE);
      
      INSERT INTO TEMP06 VALUES(SYSDATE,SYSDATE-20,SYSDATE+30);
      /*오늘날짜, -는 지나간 날짜 과거 20일전,+는 앞으로 다가올 날짜 오늘부터 30일 후날짜*/
      SELECT * FROM TEMP06;

    INSERTINTOTEMP06;VALUES(SYSDATE,SYSDATE-20,SYSDATE+30);

     SELECT TO_CHAR(COL1,'YYYY-MM-DD HH24:MI:SS'),
             TO_CHAR(COL2,'YYYY-MM-DD HH24:MI:SS'),
             TO_CHAR(COL3,'YYYY-MM-DD HH24:MI:SS')
        FROM TEMP06;
        
        /*7로나눈  나머지가 0이면 일요일 1이면 월요일... */
        SELECT MOD((TRUNC(SYSDATE)-TRUNC(TO_DATE('00010101')))-1,7)
          FROM DUAL;  =>결과:3  메모: -1해주는 이유는 하루가 다 안지났기 때문 
        SELECT ((TRUNC(SYSDATE)-TRUNC(TO_DATE('00010101')))-1)
          FROM DUAL;   =>결과:738195

    TRUNC: 시간이나 숫자를 절사할 때 쓰는 함수

    <숫자에 적용>

    SELECT TRUNC(3.129,2) FROM DUAL

    3.129를 소수점 2자리까지 자르란 소리이다.

    결과는 3.12 이다. ROUND 함수처럼 반올림 해주는 거 없이, 그냥 지정한 자릿수 이후로는 전부 잘라버린다.

    <날짜에 적용>

    TRUNC(날짜, 날짜형식)

    해당 날짜형식 이외에는 초기화를 시켜버린다고 볼 수 있다.

    그냥쓰면 날짜 형식으로 나옴
    SELECT TRUNC(SYSDATE)
          FROM DUAL;

    TO_DATE:문자를 날짜 데이터 타입으로 변화해 주는 함수

     



     2)TIMESTAMP
      -시간대(TIMEZONE) 정보와 10억분의 1초 단위의 정교한 시각 정보를 반환
      -TIMESTAMP: 시간대 정보 없음.
       TIMESTAMP WITH TIME ZONE 서버가 위치한 시간대 정보(대륙명/도시명) 제공,
       TIMESTAMP WITH LOCAL TIME ZONE : LOCAL 서버가 위치한 시간대 정보로 보통 TIMESTAMP와
       동일(시간대정보 없음)

     


       (사용형식)
        컬럼명 TIMESTAMP
        컬렴명 TIMESTAMP  WITH TIME ZONE
        컬럼명 TIMESTAMP WITH LOCAL TIME ZONE

    사용예)
       CREATE TABLE TEMP07(
       COL1 TIMESTAMP,
       COL2 TIMESTAMP WITH TIME ZONE,
       COL3 TIMESTAMP WITH LOCAL TIME ZONE);
       
       INSERT INTO TEMP07 VALUES(SYSDATE,SYSDATE,SYSDATE);
       
       SELECT * FROM TEMP07;

      



    4. 기타자료형
      -2진자료를 저장하기위한 데이터 타입
      -RAW, LONG RAW, BFILE, BLOB
      -이진자료는 데이터베이스에서 해석하거나 변환하지 않음
      
      1)RAW
      -상대적으로 작은크기의 이진자료 저장
      -인덱스 처리 가능
      -최대 2000 BYTE 처리 가능
      -16진수와 2진수만 저장 가능
      
      (사용형식)
      컬럼명 RAW(크기)
      
    사용예)

     CREATE TABLE TEMP08(
       COL1 RAW(2000));
       
       INSERT INTO TEMP08 VALUES(HEXTORAW('FFC7'));
       INSERT INTO TEMP08 VALUES('1111111111000111');
       
       SELECT * FROM TEMP08;

    HEXTORAW는 입력 파라미터로 들어온 값울 16진수에서 RAW데이터 타입으로 바꾼다.
      



      2) BFILE
      -이진자료 저장
      -대상이되는 이진자료는 데이터베이스 밖의 별도 폴더에 저장되고 데이터베이스에는 경로(PATH)만 저장
      -4GB까지 저장 가능
      
      (사용형식)
       컬럼명 BFILE;
       
     ** BFILE 타입을 이용한 이미지 저장 절차

     (0) 테이블 생성
         CREATE TABLE TEMP09(
           COL1 BFILE); 
          
       (1) 이미지 준비(jpg타입)
           minion.jpg
       (2) 경로객체(DIRECTORY) 생성
           CREATE DIRECTORY 디렉토리명 AS 경로명;
           
           CREATE DIRECTORY TEST_DIR AS 'D:\A_TeachingMaterial\02_Oracle';
           
       (3) 자료 삽입
           INSERT INTO TEMP09
             VALUES(BFILENAME('TEST_DIR','minion.jpg'));
            
        SELECT *FROM TEMP09;

    minion.jpg가 저장됨(수정전 사진이라jpg빠짐)-디드라이브에 저장된것임)

     


       
     3)BLOB(Binary Large OBjects)
      -이진자료 저장
      -대상이되는 이진자료를 데이터베이스 내부에 저장
      -최대 4GB 까지 처리 가능
      
      (사용형식)
      컬럼명 BLOB;
      
      **BLOB 자료타입에 이미지 저장

    (1)테이블 생성
      CREATE TABLE TEMP10(
         COL1 BLOB);
      (2)PL/SQL을 이용한 저장 모듈 작성
       DECLARE
        L_DIR VARCHAR2(20):='TEST_DIR';
        L_FILE VARCHAR(30):='minion.jpg';
        L_BFILE BFILE;
        L_BLOB BLOB;
       BEGIN
         INSERT INTO TEMP10 VALUES(EMPTY_BLOB())
           RETURN COL1 INTO L_BLOB;
           
        L_BFILE:=BFILENAME(L_DIR, L_FILE);
        DBMS_LOB.FILEOPEN(L_BFILE, DBMS_LOB.FILE_READONLY);
        DBMS_LOB.LOADFROMFILE(L_BLOB,L_BFILE, DBMS_LOB.GETLENGTH(L_BFILE));
        DBMS_LOB.FILECLOSE(L_BFILE);
         
          COMMIT;
        END;
        
        SELECT *FROM TEMP10;


       

    728x90
Designed by Tistory.