데이터 형 변환 함수 (이채남 선생님 저 '오라클 실습' 참고)

2016. 1. 28. 22:55

-- 데이터형 변환함수

-- 기본 사항              

--          날짜 ---> 문자 ---> 숫자

--             TO_CHAR   TO_NUMBER


--          날짜 <--- 문자 <--- 숫자

--             TO_DATE   TO_CHAR


--          날짜  --/--> 숫자 (불가능)

--          날짜 <--/--  숫자 (불가능)


-- TO_CHAR(1)

-- 날짜를 문자로

-- 기본예제

select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; --2016-01-28 21:37:07

select to_char(sysdate,'YyyY') from dual; --2016

select to_char(sysdate,'YYY') from dual; --016

select to_char(sysdate,'YY') from dual; --16

select to_char(sysdate,'Y') from dual; --6

select to_char(sysdate,'SYEAR') from dual; -- TWENTY SIXTEEN

select to_char(sysdate,'YEAR') from dual; --TWENTY SIXTEEN

select to_char(sysdate,'Q') from dual; --1

select to_char(sysdate,'mm') from dual; --01

select to_char(sysdate,'month') from dual; --1월(January)

select to_char(sysdate,'mon') from dual; --1월(JAN)

select to_char(sysdate,'D') from dual; --5

select to_char(sysdate,'DD') from dual; --28

select to_char(sysdate,'DDD') from dual; --028

select to_char(sysdate,'DAY') from dual; --목요일 (Thursday)

select to_char(sysdate,'DY') from dual; --목 (THU)

select to_char(sysdate,'AM') from dual; --오후

select to_char(sysdate,'PM') from dual; --오후

select to_char(sysdate,'A.M.') from dual; --오후

select to_char(sysdate,'P.M.') from dual; --오후

select to_char(sysdate,'HH') from dual; --09

select to_char(sysdate,'HH24') from dual; --21

select to_char(sysdate,'MI') from dual; --37

select to_char(sysdate,'SS') from dual; --07


--응용

select to_char(sysdate,'DD') from dual; --28 --> 원본

select to_char(sysdate,'DDTH') from dual; --28TH (서수)

select to_char(sysdate,'DDSP') from dual; --TWENTY-EIGHT (숫자를 철자로)

select to_char(sysdate,'DDSPTH') from dual; --TWENTY-EIGHTH (서수를 철자로)

select to_char(sysdate,'DDTHSP') from dual; --TWENTY-EIGHTH (서수를 철자로2)


--따라하기

select to_char(sysdate,'yy/mm/dd') date1, --16/01/28

to_char(sysdate,'yyyy.mm.dd') date2, --2016.01.28

to_char(sysdate,'month dd.yyyy') date3, --1월 28.2016

to_char(sysdate,'DY DD MON YY') date4, --목 28 1월 16

to_char(sysdate,'Day Mon DD') date5 --목요일 1월 28

from dual;


-- 연습문제

select emp_name, emp_id, birth_date from temp; --> 생일과 요일 출력변환

select emp_name, emp_id, to_char(birth_date,'yyyy "년" month dd"일" Day') from temp; --> 정답



-- TO_CHAR(2)

-- 숫자를 문자로

select to_char(192939,'999999') from dual; --192939

select to_char(192939,'00000000') from dual; --00192939

select to_char(192939,'999,999') from dual; --192,939

select to_char(192.939,'999.99') from dual; --192.94

select to_char(192939,'$999999') from dual; --$192939

select to_char(192939,'L999,999') from dual; --         ₩192,939

select to_char(-192939,'999999MI') from dual; --192939- (마이너스표시)

select to_char(192939,'999999EEEE') from dual;   2E+05 (과학적표기)


--따라하기

select to_char(1234,'09,999') number1, --01,234

       to_char(1234.56,'99,999.99') number2, --1,234.56

       to_char(1234,'$99,999') number3, --$1,234

       to_char(1234,'L99,999') number4, --         ₩1,234

       to_char(-1234,'99,999MI') number5 --1,234-

       -- to_char(-1234,'99,999EEEE')

       from dual;

       

--연습문제

select salary,

       to_char(salary, '099,999,999') SAL1,

       to_char(salary, '999,999,999.00') SAL2, 

       to_char(salary, '$999,999,999') SAL3,

       trim(to_char(salary, 'L999,999,999')) SAL4,

       to_char(salary, '999,999,999') SAL5 ,

       to_char(salary, '99EEEE') SAL6

       from temp;


       

--TO_NUMBER

--문자를 숫자로(O)

--날짜를 숫자로(X)


--따라하기

select to_number('123456') TONUM1, --123456

       to_number('123,456','999999') TONUM2 --123456

       from dual;


       

--TO_DATE

--문자를 날짜로(O)

--숫자를 날짜로(X)


select to_date('1997-12-31 13:33:44','yyyy-mm-dd hh24:mi:ss')

from dual; -- 97/12/31


select round(sysdate - to_date('19700101','yyyy-mm-dd')) "며칠"

from dual; --16829


--1970년 1월 1일 00시00분00초에서 946075441초가 지나면??

select to_date('19700101000000','yyyymmddhh24miss') +

           946075441 / (24*60*60)

           from dual; -- 99/12/24

곰돌곰둘 Oracle_DB_Unix admin/미분류