2020. 5. 2.

[Oracle] 15. 단일 행 함수 : 변환 함수 정리


단일 함수에서 사용하는 날짜 출력 형식

ㅇ        
표현 문자
의미()
YYYY
자리로 표현된 년도(1999, 2008, 2011)

YY
자리로 표현된 년도(99,03)
  • 앞에 자리는 현재 년도를 이용한다.
  • 2018 현재 99년은 2099년을 의미한다.

RR
자리로 표현된 년도(99,03)
  • 앞에 자리는 현재 년도와 가까운 년도를 이용한다.
  • 2018 현재 99년은 1999년을 의마한다.
MM
자리 숫자로 표현된 (03, 04)

month
영문이나 한글로 표현된 (march, april, 3, 4)

mon
약자로 표현된 영문 한글 (mar, apr, 3, 4)
  • 한글인 경우 month 동일하다.
DD
두자리 숫자로 표현된 일자(01, 02)

DAY
영문이나 한글 요일 (Sunday, Monday, 일요일, 월요일)

DY
약자로 표현된 요일 (sun, mon, , )
hh24
1시에서 24시까지 표현        

hh
1시에서 12시까지 표현
  • 정확한 표현을 위해 am/pm 추가하는 것이 좋다.
mi
자리  표시
ss
자리 표시        

ssssss
하루를 초로 환산한 다음 표현(0~86399)
오전/오후
am/pm
오전 오후 표기
  • 형식 지정 시에는 둘이 똑같다.

단일 함수에서 사용하는 숫자 출력 형식

표현문자
의미()
9
숫자의 출력 폭지정, (자리수가 부족하면 생략한다.)
0
선행 0 표기 (자리수를 반드시 맞춘다.)
$
화폐 표기 (달러)
L
지역 화폐 표기( 국가 코드에 따라 다르다.)
,
쉼표 위치  지정
.
마침표 위치 지정
MI
음수의 - 기호 오른쪽에 표기
EEEE
실수 표현법을 이용

*변환 함수

함수명
기능
TO_CHAR
날짜나 숫자를 문자로 변환한다.
  • 출력 데이터의 형식을 지정한다.
TO_CHAR(날짜, 출력형식), TO_CHAR(숫자, 출력형식)
TO_DATE
데이터를 날짜형으로 해석한다.
TO_DATE(문자, 해석형식)
TO_NUMBER
데이터를 숫자로 해석한다.
대부분의 경우 오라클의 자동 변환에 의해 숫자로 읽을 있는 문자는 숫자로 자동 변환됨으로 사용 빈도가 낮다.

예제 1. 현재 날짜를 다양한 형식으로 출력해보자

select to_char(sysdate, 'YYYY/MM/DD') 날짜,
to_char(sysdate, 'YYYY/MM/DD:HH24:MI:SS') 날짜,
to_char(sysdate, 'YY/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" 입니다."') 날짜
from dual;


예제 2. 10 부서 사원의 입사일을 다음의 형식으로 검색한다.
'XXX 사원의 입사일은 XXXX XX XX일입니다."

select ename ||' 사원의 입사일은 '|| to_char(hdate, 'YYYY" "MM" "DD" 입니다."') 입사일
from emp
where dno = '10';


예제 3. 다양한 형식으로 숫자를 출력해 보자

select to_char(12345.678, '999,999.99999') num from dual;
# 소수 이하에 지정한 자리는 0 채우지만 앞쪽 빈자리는 무시한다.


select to_char(12345.678, '099,999.999') num from dual;



select to_char(12345.678, '9,9999.9') num from dual;
# 소수 이하 자리수를 부족하게 지정하면 반올림 된다.


select to_char(12345.678, '9,999.9') num from dual;
# 소수점 형식이 원래 값보다 작으면 출력장애가 발생한다.


select to_char(1234, '$999,999') num from dual;


select to_char(1234, 'L999,999') num from dual;
# 시스템의 설정에 따라 경우 '$' 또는 '' 기호로 출력되기도 한다.


select to_char(-1234, '999,9999MI') num from dual;


select to_char(123456789, '9.999EEEE') num from dual;



예제 3. 10 부서 사원의 보너스가 급여의 퍼센트 인지 검색한다.
  • 급여는 월간 급여이고 보너스는 연간 보너스이다.
  • 보너스가 NULL 경우 0으로 환원해서 검색한다.

select eno  사번, ename 이름, to_char(nvl(comm,0)/(sal*12)*100, '90.99') || '%' 급여_비율
from emp
where dno='10';


예제 4. 1992 이전에 입사한 사원의 정보를 검색해 보자

select eno 사번, ename 이름, hdate 입사일 from emp
where hdate < to_date('19920101','YYYYMMDD');


실습

 1. 학생의 평균 평점을 다음 형식에 따라 소수점 이하 자리까지 검색한다. 'XXX 학생의 평균 평점은 x.xx입니다.'

select sname|| ' 학생의 평균 평점은 '|| trunc(avr,2)||'입니다.'
from student;

# 소수점 두째자리까지 찍기 위해서는 trunc 이용해야함.


 2. 교수의 부임 일을 다음 형식으로 검색한다. 'XXX 교수의 부임일은 YYYY MM DD일입니다.'

select pname ||' 교수의 부임일은 '|| to_char(hiredate, 'YYYY" "MM" "DD"일입니다."')
from professor;

# to_char 변환하여 날짜를 문자로 변환하여 출력한다.


 3. 교수 중에 3월에 부임한 교수의 명단을 검색한다.

select pname, hiredate
from professor
where to_char(hiredate,'MM') = 03;

#to_char 이용하여 3월만 뽑아냄


 4. 화학과 1학년 학생들의 4.5 환산 평점을 다음 형식에 따라 소수점 이하 자리까지 검색한다. 'XXX 학생의 4.5 환산 평점은 x.xx입니다.'

select sname ||' 학생의 4.5 환산 평점은 '|| trunc((avr/4*4.5),2)||'입니다.'
from student;

#trunc 이용해 소수점을 조절하고 trunc 안에서 연산을 .




댓글 없음:

댓글 쓰기