2.2.1 문자,숫자,날짜 데이터 타입

추승완·2025년 3월 14일

오라클 SQL

목록 보기
3/27

1. 문자 데이터 타입


 - char, varchar2, long, clob(Character Large Object)
 - 고정길이(char) 와 가변길이 (varchar2, long, clob)로 구분
 
사용 예)
 CREATE TABLE TEMP01(
    COL1 CHAR(20),
    COL2 CHAR(20 BYTE),
    COL3 CHAR(20 CHAR)
);
  
 INSERT INTO TEMP01(COL1,COL2,COL3) 
    VALUES('중구 계룡로','중구 계룡로','중구 계룡로');

 SELECT * FROM TEMP01;
 SELECT LENGTHB(COL1) AS "COL1",
        LENGTHB(COL2) AS "COL2",
        LENGTHB(COL3) AS "COL3"
    FROM TEMP01;
    
  CREATE TABLE TEMP02(
    COL1 VARCHAR2(200),
    COL2 VARCHAR2(200 BYTE),
    COL3 VARCHAR2(200 CHAR),
    COL4 LONG,
    COL5 CLOB,
    COL6 CLOB
  );
  
  INSERT INTO TEMP02 VALUES('대전시 중구 계룡로 846',
                            '대전시 중구 계룡로 846',
                            '대전시 중구 계룡로 846',
                            '대전시 중구 계룡로 846',
                            '대전시 중구 계룡로 846',
                            '대전시 중구 계룡로 846');
                            
  SELECT * FROM TEMP02;
  
  SELECT LENGTHB(COL1) AS "COL1",
         LENGTHB(COL2) AS "COL2",
         LENGTHB(COL3) AS "COL3",
         --LENGTHB(COL4) AS "COL4",
         LENGTH(COL5) AS "COL5",
         LENGTH(COL6) AS "COL6"
    FROM TEMP02;

2. 숫자 데이터 타입

 - NUMBER[(P [,S])], DECIMAL, INTERGER,...
 
사용형식)
 컬럼명 NUMBER [(P|* [,S])]
 
사용예)
 CREATE TABLE TEMP03(
    COL1 NUMBER, --456.73
    COL2 NUMBER(3), --456
    COL3 NUMBER(3,2), --456.73으로 하면 오류남
    COL4 NUMBER(5,2),
    COL5 NUMBER(7,1),
    COL6 NUMBER(7,-1),
    COL7 NUMBER(7,-2),
    COL8 NUMBER(*,2),
    COL9 NUMBER(4,5),
    COL10 NUMBER(4,7),
    COL11 NUMBER(3,4),
    COL12 NUMBER(4,6)
    );

 INSERT INTO TEMP03 VALUES(456.73,456.73,6.73,456.73,456.77,50456.73,12456.73,
                           12456.7393,0.01234,0.0001234,0.0012,0.00123789);
                           
 SELECT * FROM TEMP03;
 
 CREATE TABLE TEMP04(
    COL1 NUMBER,
    COL2 INTEGER,
    COL3 DECIMAL,
    COL4 BINARY_DOUBLE);
    
    -- 자바에서 쓰려면 조심해야됨. 빅인티저를 써야된다. 넘버(2)라면 -99~99 근데 BYTE는 2바이트라? 아마
  • SELECT * FROM TEMP03; 결과
  • temp04 테이블

3. 날짜 데이터 타입

 - DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 제공
 - 날짜자료는 덧셈과 뺄셈의 대상이 됨.
 - 정수 +(-) 날짜 : 정수만큼의 다가올 날의 날짜(+), 정수만큼의 지나온 날의 날짜(-)
 - 날짜 - 날짜 : 두 날짜사이의 날수(DAYS) 반환
 - SYSDATE, SYSTIMESTAMP 함수로 시스템의 날짜를 반환 받아 사용 가능
 
사용예)
 CREATE TABLE TEMP05(
    COL1 DATE,
    COL2 DATE,
    COL3 TIMESTAMP,
    COL4 TIMESTAMP WITH TIME ZONE,
    COL5 TIMESTAMP WITH LOCAL TIME ZONE
    );
    
 INSERT INTO TEMP05 VALUES(SYSDATE, SYSDATE-10, SYSTIMESTAMP,
                           SYSTIMESTAMP, SYSTIMESTAMP);
                           
 ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS' -- 환경변수 변경

 SELECT * FROM TEMP05;
 

사용 예) 키보드로 날짜를 입력 받아 요일을 출력하시오
    ACCEPT P_DATE PROMPT '날짜입력(YYYYMMDD) : '
    DECLARE
     L_DATE DATE := TRUNC(TO_DATE(&P_DATE));
     L_DAYS NUMBER := 0;
     L_RES VARCHAR2(100);
    BEGIN
     L_DAYS:=L_DATE - TRUNC(TO_DATE('00010101')) - 1;
     IF MOD(L_DAYS,7)=0 THEN L_RES:='일';
     ELSIF MOD(L_DAYS,7)=1 THEN L_RES:='월';
     ELSIF MOD(L_DAYS,7)=2 THEN L_RES:='화';
     ELSIF MOD(L_DAYS,7)=3 THEN L_RES:='수';
     ELSIF MOD(L_DAYS,7)=4 THEN L_RES:='목';
     ELSIF MOD(L_DAYS,7)=5 THEN L_RES:='금';
     ELSE L_RES:='토';
     END IF;
     
    DBMS_OUTPUT.PUT_LINE(&P_DATE||'는 '||L_RES||'요일입니다');
    END;
profile
안녕하세요. 개발, 해보겠습니다

0개의 댓글