DataBase

221110 데이터 베이스 오라클 : 날짜와 숫자 자료

헤니s 2022. 11. 16. 09:10

Oracle SQL - 숫자 자료, 날짜 자료


 2) 숫자 자료 타입
  . 정수 및 실수를 저장
  . NUMBER타입 제공
  . 저장범위 : 1.0 X 10^-130 ~ 9.99....99 X 10^125 (소수점이하 38자리까지 허용)
  --          제일 작은수    ~   약 1.0 X 10^126
  
  
(사용형식)
  컬럼명 NUMBER([정밀도|*][,스케일]) -- * : 1.0 X 10^-130 ~ 9.99....99 X 10^125 범위의 수 알아서 생성
   . 정밀도 : 전체 자리수 의미(I ~ 30)
   . 스케일 소숫점이하의 자리수
   . 저장은 스케일이 양수인 경우 : '스케일 + 1'번째 자리에서 반올림하여 '스케일'자리까지 저장
           스케일이 음수인 경우 : 정수 부분 '스케일' 위치에서 반얼림
   . 정수부분이 데이터 보다 작으면 오류
   . 스케일이 생략되면 0으로 간주
   . 정밀도예 '*'가 사용되면 전체 크기를 시스템에게 위임하여 가장 효율적인 크기를 배정 받음
     
 선언예) 
  컬럼명 NUMBER -- 사용자가 입력한 값을 그대로 저장한다. 
  컬럼명 NUMBER(*,3) -- * : 컴퓨터가 알아서 숫자 자리 처리함
  컬럼명 NUMBER(6) -- 스케일값 생략 : 0 으로 간주/소숫점을 없앤다. =(6.0)
  컬럼명 NUMBER(6,2) -- 일반적 사용 형태 : 소숫점이하3번째에서 반올림하고 정수부분은 4자리이다.
  컬럼명 NUMBER(6,0)
  컬럼명 NUMBER(6,-2)
  
  
  
--< 형 식 >
--NUMBER(10,2) : 12345.6789102 

(소숫점 이하 순서 양수로 저장됨 : 123 / 양수는 소숫점 기준으로 음수순번)
--                       -5-4-3-2-1.1234567 <<자리번째 (정수5개+소숫점이하7 = 5+7 =12)
--NUMBER(12,2) << 맞는 표현
--NUMBER(전체자리 : 소숫점이하 포함,~번째 자리에서 반올림: 양수인경우 N+1자리부터/음수인경우 N번째자리)
-- 정밀도~ 스케일 생략가능함 : (1.0 X 10^-130 ~ 9.99....99 X 10^125) 범위 내
  
  
  
  사용예)
  ---------------------------------------------------------------------------------------------
  입력값                     선언                     기억되는 형태
  ---------------------------------------------------------------------------------------------
  1234.56789        NUMBER                   1234.56789
  1234.56789        NUMBER(*,2)            1234.57  --반올림 소수자리3         
  1234.56789        NUMBER(6)               1235--소수첫째자리에서 반올림함 1234.5<<
  1234.56789        NUMBER(5,2)             오류 -- 소수자리3에서 반올림 하는데 전체값은 '1234.57' 6자리이다
  1234.56789        NUMBER(6,2)             1234.57
  1234.56789        NUMBER(6,0)             1235
  1234.56789        NUMBER(6,-2)            1200 -- 1234에서 3에서(-2자리) 반올림 1200
  

    CREATE TABLE TEMP05(
        COL1 NUMBER,
        COL2 NUMBER(*,2),
        COL3 NUMBER(6),
        COL4 NUMBER(5,2),
        COL5 NUMBER(6,2),
        COL6 NUMBER(6,0),
        COL7 NUMBER(6,-2));


     

    INSERT INTO TEMP05 VALUES(1234.56789,1234.56789,1234.56789,
                              123.56789,1234.56789,1234.56789,1234.56789);
    -- 오류보고 precision : 정밀도 : 더 큰값이 들어왔습니다.
    -- COL4 NUMBER(5,2) => 4번째 값 : 123.57 // '123.56789' 

    => 소숫점 3자리에서 반올림하고 전체 숫자는 5자리이다
    
    SELECT * FROM TEMP05;

    
    
 3) 날짜 자료 타입
  . 날짜자료(년,월,일,시,분,초) 저장 -- YYYY-MM-DD HH24:MI:SS 14자리
  . DATE, TIMESTAMP 타입 제공

 -- TIMESTAMP : 십억분의 일초 까지저장가능 / 3가지 타입이 있음 // 보통은 DATE 타입 사용
 -- 둘다 크기지정 안한다.
  
  
   (1) DATE 타입
    . 기본날짜 자료형
    . 덧셈(다가올 날짜)과 뺄셈(지나간 날짜)의 대상이 됨
    .  **SYSDATE : 날짜함수로 (지금 시스템이 제공하는) 시스템의 날짜 및 시각 정보를 반환 

    -- 매개변수가 없는 함수. 
    -- 함수는 매개변수가 없으면() 괄호 생략한다.
    -- 날짜로 인식시키는 방법 : YYYY년,MM월,YY일
    -- 날짜형 기억공간에 숫자를 저장함 20200229 윤년이면 되고 윤년이 아니면 오류


사용형식)
    컬럼명 DATE 
    

사용예)

CREATE TABLE TEMP06(
        COL1 DATE, -- 크기 지정안한다.
        COL2 DATE,
        COL3 DATE);
      
    INSERT INTO TEMP06 VALUES(SYSDATE,SYSDATE-10,SYSDATE+10);
    --                  오늘날짜, 오늘날짜 -10일전, 오늘날짜 +10일후 //윈도우 시스템 시간확인
    -- 곱셈 안되고 덧셈, 뺄셈만
    
    SELECT * FROM TEMP06;

   
-- 시분초도 저장되어 있는데 컬럼에 안보임 -> 시분초까지 출력하기 위해서는 별도의 함수가 필요함 

**시간정보 표시는 TO_CHAR 함수 사용 --변환 함수 

SELECT TO_CHAR(COL1,'YYYY-MM-DD HH24:MI:SS'), -- 13시 HH24  = 1시 HH12
       TO_CHAR(COL2,'YYYY-MM-DD HH24:MI:SS'),
       TO_CHAR(COL3,'YYYY-MM-DD HH24:MI:SS')
  FROM TEMP06;

-- 출력 : 2022-11-10 12:15:55



-- 중요!↓
날짜자료 사이의 뺄셈은 두 날짜사이의 일수(DAYS)를 반환

    SELECT case mod(to_date('19991111')-TO_DATE('00010101')-1,7) -- 목요일
                when 0 then '일요일'
                when 1 then '월요일'
                when 2 then '화요일'
                when 3 then '수요일'
                when 4 then '목요일'
                when 5 then '금요일' 
                when 6 then '토요일'
            end as 요일
        FROM DUAL;                                    
    -- 출력 : 5 오늘은 금요일입니다.
    -- mod는 7나눈 나머지 = 0이면 일요일
    -- 오늘날짜에서 00010101 빼줌 ; 오늘은 아직 안지나서 -1을 해준다. -> 7로 나누고 나머지를 반환하세요
    -- => 5라는 값 => 금요일 판단.


    
   (2) TIMESTAMP 타입
     . 매우 정교한 시각정보가 필요하거나 시간대역(TIME ZONE) 정보가 필요한 경우 사용

(사용형식)
    컬럼명 TIMESTAMP -- 시간대역 정보없이 10억분의 1초 시각정보 반환
    컬럼명 TIMESTAMP WITH LOCAL TIME ZONE 

-- 로컬서버가 위치한 지역(현재 로그인된 지역)의
   시간대역정보(생략 됨)와 10억분의 1초 시각정보 반환
    컬럼명 TIMESTAMP WITH TIME ZONE 

-- 서버가 위치한 시간대역정보(생략 됨)와 10억분의 1초 시각정보 반환

사용예)

CREATE TABLE TEMP07(
        COL1 TIMESTAMP, -- 매우정교함 표로 보여질때는 소숫점자리가 짤림.
        COL2 TIMESTAMP WITH LOCAL TIME ZONE, -- (시간대역정보)생략 COL1과 거의 같음
        COL3 TIMESTAMP WITH TIME ZONE); -- ASIA / SEOUL 

        // 윈도우시스템- 시간및 날짜 : (UTC +  ) 서울
                            --         대륙명 / 도시            
    INSERT INTO TEMP07 VALUES(SYSDATE,SYSDATE,SYSDATE);
    
    SELECT * FROM TEMP07;