Digking's cave

함수 - 3.변환함수 본문

기초/Oracle

함수 - 3.변환함수

디깅 2019. 4. 24. 10:09
728x90

--1)주제 : 변환 함수
--        이 함수는 오라클의 데이터 출력형식을 변환하는 함수이다
--        응용프로그램의 함수로 대체하기 어렵다.
--        오라클은 상식적인 수준의 형 변환은 자동으로 구현한다.
--        예를 들어 문자 '1'은 연산자를 사용할 경우 숫자 1로 자동으로 치환된다
--        그러나 특별한 출력 형태를 유지하거나 사용자의 입력을 
--        DBMS가 해석해야 하는 경우에는 반드시 변환함수를 사용해야 한다.
--
--2) 날짜 출력 형식
--의미        표현문자        내용
-----------------------------------------------------------------------
--년          YYYY          4자리로 표현된 년도(1999, 2019)
--            YY            2자리로 표현된 년도(99,19)
--                          앞에 2자리는 현재 년도를 이용한다
--                          99년은 2099년을 의미한다.
--            
--            RR            2자리로 표현된 년도(99,19)
--                          앞에 2자리는 현재 년도와 가장 가까운 년도
--                          99년은 1999년을 의미한다.
-------------------------------------------------------------------------
--월          MM             2자리 숫자로 표현된 월(03,04)
--           MONTH          영문이나 한글로 표현된 월(MARCH, 3월)
--           MON            약자로 표현된 영문 및 한글월(MAR, 3월)
--                          한글인 경우 MONTH와 동일하다
-------------------------------------------------------------------------
--일         DD             2자릴 숫자로 표현된 일자(01,02)
--          DAY             영문이나 한글 요일(SUNDAY, 일요일)
--          DY              약자료 표현된 요일(SUN,일)
-------------------------------------------------------------------------
--시        HH24             1시에서 24시까지 표현
--          HH              1시에서 12시까지 표현
--                          정확한 표현을 위해 AM/PM을 추가하는 것
-------------------------------------------------------------------------
--분        MI               2자리 분 표시
-------------------------------------------------------------------------
--초        SS               2자리 초 표시
--        SSSSS             하루를 초로 환산한 다음 표현(0-86399)
-------------------------------------------------------------------------
--오전/오후 AM/PM             오전 오후 표기
--                           형식 지정 시에는 둘이 똑같다
--                           
--3)숫자 출력 형식
--표현문자        내용
-------------------------------------------------------------------------
--9           숫자의 출력 폭지정(자리수가 부족하면 생략)
--0           선행 0표기(자리수를 반드시 맞춘다)
--$           화폐 표기(달러)
--L           지역 화폐 표기(각 국가 코드에 따라 다르다)
--,           쉼표 위치 지정
--.           마침표 위치 지정
--MI          음수의 -기호를 오른쪽에 표기
--EEEE        실수 표현법을 이용
--
--4)변환 함수의 종류
--
--함수명         기능
--------------------------------------------------------------------------
--TO_CHAR       날짜랑 숫자를 문자로 변환한다
--              출력 데이터 형식을 지정한다
--              TO_CHAR(날짜, 출력형식)
--              TO_CHAR(숫자, 출력형식)
--------------------------------------------------------------------------
--TO_DATE       데이터를 날짜형으로 해석한다
--              TO_DATE(문자, 해석형식)
--------------------------------------------------------------------------
--TO_NUMBER     데이터를 숫자로 해석한다
--              대부분의 경우 오라클의 자동 형 변환에 의해 
--              숫자로 읽혀지므로 사용 빈도가 낮다
--              SQL보다 PL-SQL에서 간혹 사용된다.
--------------------------------------------------------------------------

--현재 날짜를 다양한 형식으로 출력한다
SELECT TO_CHAR(sysdate, 'YYYY/MM/DD') 날짜,
       TO_CHAR(sysdate, 'YYYY/MM/DD:HH24:MI:SS') 날짜,
       TO_CHAR(sysdate, 'YYYY/MM/DD:HH:MI:SS AM') 날짜
FROM dual;

SELECT TO_CHAR(sysdate, 'DD Month YYYY')ToDay
FROM dual;

SELECT TO_CHAR(sysdate, 'DAY Mon YY')ToDay
FROM dual;

SELECT TO_CHAR(sysdate, 'DY Mon YY')ToDay
FROM dual;

SELECT TO_CHAR(sysdate, '"오늘은 " YYYY"년 " MM"월 "DD"일 입니다"') ToDay
FROM dual;

--10번 부서 사원의 입사일을 다음의 형식으로 검색하세요
--ㅇㅇㅇ사원의 입사일은 ㅇㅇㅇㅇ년ㅇㅇ월 ㅇㅇ일입니다.

SELECT ename||'-사원의 입사일은 '|| TO_CHAR(hdate, 'YYYY"년 " MM"월 "DD"일 입니다-"') ToDay
FROM emp
WHERE dno='10';

--다양한 숫자를 출력해보자
SELECT TO_CHAR(12345.678, '999,999.99999') num --뒤에 형식으로 앞 숫자를 나타냄
FROM dual;

SELECT TO_CHAR(12345.678, '099,999.99999') num --자리에 뭐가 없으면 0으로 채운다
FROM dual;

SELECT TO_CHAR(12345.678, '9,9999.9') num --반올림된다
FROM dual;

SELECT TO_CHAR(1234, '$999,999') dollar 
FROM dual;

SELECT TO_CHAR(1234, 'L999,999') won --L로컬 화폐 
FROM dual;

SELECT TO_CHAR(-1234, '999,999MI') num 
FROM dual;

SELECT TO_CHAR(123456789, '9.999EEEE') num 
FROM dual;

--10번 부서사원의 보너스가 급여의 몇퍼센트인지 검색한다
--급여는 월간 급여이고 보너스는 연간 보너스이다 
--보너스가 null인 경우 0으로 환원해서 검색한다
SELECT eno, ename, TO_CHAR(NVL(comm,0)/(sal*12)*100, '99')||'%' 급여비율
FROM emp
WHERE dno='10';

--1992년 이전에 입사한 사원의 정보를 검색해라
SELECT eno, ename, hdate
FROM emp
WHERE hdate < TO_DATE('1992/01/01', 'YYYY/MM/DD');

반응형

'기초 > Oracle' 카테고리의 다른 글

서브 쿼리  (0) 2019.04.24
함수 - 5.그룹함수와 HAVING절  (0) 2019.04.24
함수 - 4.그룹함수  (0) 2019.04.24
함수 - 2.숫자함수  (0) 2019.04.24
함수 - 1.문자함수  (0) 2019.04.24