Oracle DB_내장함수 (타입변환)

JW__1.7·2022년 8월 26일
0

DB 공부일지

목록 보기
12/27

DUAL 테이블

  • DUMMY 칼럼에 'X' 값을 하나 가지고 있는 테이블
  • 아무 의미 없는 테이블
  • 오라클에서는 FROM절이 필수이기 때문에 테이블이 필요 없는 조회문에서 DUAL 테이블을 사용한다.
DESCRIBE DUAL;

SELECT DUMMY
  FROM DUAL;

질의 결과

타입 변환 함수

  • TO_NUMBER('문자열') : 문자열 형식의 숫자를 숫자 형식으로 변환
  • TO_CHAR(데이터, ['형식']) : 지정된 데이터(주로 숫자나 날짜)를 형식에 맞는 문자열로 변환
  • TO_DATE('문자열', '형식') : 지정된 문자열을 날짜 형식으로 변환

숫자로 변환 (TO_NUMBER)

SELECT '100', TO_NUMBER('100')
  FROM DUAL;
SELECT '1.5', TO_NUMBER('1.5')
  FROM DUAL;
  • 숫자와 '문자' 연산은 오라클에 의해서 숫자와 숫자 연산으로 수정된 뒤 처리된다.
  • '문자' → TO_NUMBER('문자') 방식으로 자동으로 처리된다.
SELECT 1 + '1'    -- SELECT 1 + TO_NUMBER('1')
  FROM DUAL;
  • '문자'와 '문자' 연산도 모두 숫자로 바꿔서 처리된다.
SELECT '1' + '1'
  FROM DUAL;

SELECT TO_NUMBER('1') + TO_NUMBER('1') 과 동일하다.

문자로 변환 (TO_CHAR)

숫자 → 문자로 변환

SELECT
       TO_CHAR(1234)            -- '1234'
     , TO_CHAR(1234,  '999999') -- '  1234'
     , TO_CHAR(1234,  '000000') -- '001234'
     , TO_CHAR(1234,  '9,999')  -- '1,234'
     , TO_CHAR(12345, '9,999')  -- ######  (4자리로 지정하였으나 값은 5자리이기 때문에 표시할 수 없음)
     , TO_CHAR(12345, '99,999') -- '12,345'
     , TO_CHAR(1.4,   '9')      -- '1', 형식은 정수 1자리 표기(소수 이하 반올림)
     , TO_CHAR(1.5,   '9')      -- '2', 형식은 정수 1자리 표기(소수 이하 반올림)
     , TO_CHAR(0.123, '0.00')   -- '0.12', 소수 이하 2자리 표기(반올림)
     , TO_CHAR(0.129, '0.00')   -- '0.13', 소수 이하 2자리 표기(반올림)
  FROM
       DUAL;

날짜 → 문자로 변환

현재 날짜와 시간
DATE 타입의 SYSDATE
TIMESTAMP 타입의 SYSTIMESTAMP

SELECT 
       SYSDATE       -- YY/MM/DD 형식으로 표시하지만 시간 데이터도 가지고 있음
     , SYSTIMESTAMP
  FROM
       DUAL;
     
SELECT
       TO_CHAR(SYSDATE, 'YYYY-MM-DD')
     , TO_CHAR(SYSDATE, 'HH:MI:SS')
  FROM
       DUAL;

날짜로 변환 (TO_DATE)

  • '05/06/07' 날짜는 언제인가? 알려주기 전에는 모름
  • 지정된 형식으로 해석
    예시1) 'YY/MM/DD' : 05년 06월 07일
    예시2) 'MM/DD/YY' : 07년 05월 06일
  • 어떤 날짜를 어떻게 해석해야 하는지 알려주는 함수
SELECT
       TO_DATE('05/06/07', 'YY/MM/DD')
     , TO_DATE('05/06/07', 'MM/DD/YY')
  FROM
       DUAL;

사원 테이블에서 90/01/01 ~ 99/12/31 사이에 입사한 사원 조회하기

SELECT EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY
  FROM EMPLOYEE
 WHERE TO_DATE(HIRE_DATE, 'YY/MM/DD') BETWEEN TO_DATE('90/01/01', 'YY/MM/DD') AND TO_DATE('31/12/99', 'DD/MM/YY');

DI1, DT2, DT3 칼럼에 현재 날짜 넣기

INSERT INTO
SAMPLE(DT1, DT2, DT3)
VALUES(SYSDATE, SYSTIMESTAMP, TO_CHAR(SYSDATE, 'YYYY-MM-DD'));

날짜 비교 연산은 TO_DATE 함수가 필요하다.

SELECT DT1,DT2,DT3
  FROM SAMPLE
 WHERE TO_DATE(DT1, 'YY/MM/DD') = TO_DATE('22/08/26', 'YY/MM/DD');

0개의 댓글