4) 숫자 변환 함수 : to_number('숫자 형태의 문자열')
select to_number('100')+1 결과값 from dual;
5) 날짜변환 함수 : to_date('날짜 형태의 문자열', '날짜 변환 포맷')
select to_date('2013-01-26', 'yyyy-mm-dd') 결과값 from dual;
6) 시스템 함수 :user - field의 데이터 사용자를 반환함
select user from dual;
7) 숫자 함수
trunc(숫자1, 자리수) : 숫자 1을 소수점 자리수에서 절사
* 자리수 생략 : 소수 버림, * 자리수 음수 : 정수의 자리수
round(숫자1, 자리수) : 숫자1을 소수점 자리수에서 반올림
ceil(숫자1 ) : 버림
select '100'+1 from dual;
select to_number('100') +1 from dual;
-- to_date('문자열', '날짜 출력 형식')
select '2016-10-17'+10 from dual; --에러 발생
select to_date('2016-02-20', 'yyyy-mm-dd')+10 from dual;
-- 숫자함수 : trunc() 버림, round() 반올림, ceil() 올림
select FIRST_NAME, (sysdate-HIRE_DATE)/365 근속연수 from emp;
-- trunc()버림
select FIRST_NAME, TRUNC((sysdate-HIRE_DATE)/365) 근속연수 from emp;
--round() 반올림
select FIRST_NAME, round((sysdate-HIRE_DATE)/365 ) 근속연수 from emp;
--round(실수값, 소수자리수) 반올림
select FIRST_NAME, round((sysdate-HIRE_DATE)/365 , 1) 근속연수 from emp;
(문제)각 직원들에 대해서 직원의 이름과 근속연수를 나타내시오
단, 근속연수는 연단위를 버림하여 나타내시오.
select ename, turnc((sysdate-hiredate)/365) 근속연수 from emp;
8)일반함수 :
NVL(컬럼, 치환할값) : 컬럼의 값이 null이면 다른 값으로 치환함
(문제) 101번학과 교수들의 이름과 급여, bonus, 연봉을 출력하시오.
select name, pay, bonus, (pay*12+nvl(bonus, 0)) "연봉
from professor where deptno=101;
decode(A,B, A ==B 일 때의 값, A<>B일 때의 값) : A <> B 일 때의 값을 생략하면
null 로 처리됨, decode함수의 매개변수의 개수는 다중조건에 의해 늘어날 수 있음.
(문제) 학과 코드가 101인 교수만 컴퓨터공학과로 출력하시오
(101 번이 아닌 교수들은 학과명에 아무 것도 출력하지 않음 )
select name, deptno, decode(deptno, 101, '컴퓨터공학과') "학과명" from prodessor;
select FIRST_NAME, DEPARTMENT_ID, decode(DEPARTMENT_ID, 90, '경리팀', '다른부서' ) from emp;
=>출력 결과
Steven 90 경리팀
Neena 90 경리팀
Lex 90 경리팀
Alexander 60 다른부서
Bruce 60 다른부서
select FIRST_NAME, DEPARTMENT_ID, decode(DEPARTMENT_ID, 90, '경리팀', '다른부서' ) from emp;
select FIRST_NAME, DEPARTMENT_ID, decode(DEPARTMENT_ID, 90, '경리팀',
20, '연구팀', 30, '총무팀', '기타' ) from emp;
--Join 으로 처리
select e.FIRST_NAME, e.JOB_ID from EMPLOYEES e JOIN DEPARTMENTS d
on e.EMPLOYEE_ID =d.DEPARTMENT_ID ;
--
select name, position, deptno, decode(deptno, 101, '컴퓨터공학과', 102, '멀티미디어공학과') from EMP;
<실습문제>
1. 각 직원의 이름, 직업콛, 급여를 나타내되 단 급여는 5자리로 나타내며
부족한 자릿수는 '*' 로 표시한다. 월급이 300 이상인 직원만 나타내시오.
select first_name, JOB_ID, lpad(SALARY , 5, '*')
from emp where SALARY >= 3000;
=>출력
Steven AD_PRES 24000
Neena AD_VP 17000
Lex AD_VP 17000
Alexander IT_PROG *9000
Bruce IT_PROG *6000
David IT_PROG *4800
Valli IT_PROG *4800
Diana IT_PROG *4200
Nancy FI_MGR 12008
2. 각 직원들에 대해서 직원의 이름과 근무개월수를 나타내되 단, 개월수가
100개월 이상인 직원만 나타내시오. 근무개월수는 개월 단위를 버림하여 나타내시오.
select first_name, trunc(months_between(sysdate, HIRE_DATE ))
from emp where months_between(sysdate, HIRE_DATE ) >= 100;
=>출력
Bruce 118
David 140
Valli 133
Diana 121
Nancy 175
Daniel 175
John 137
3. 전체 직원에 대하여 직원의 이름과 직업코드, 총 근무주(week)수를 구하시오
(단, 근무주수가 많은 직원부터 나타내고, 같은 근무주수가 있으면 이름에 대하여
오름차순 정렬하시오)
select first_name , JOB_ID, TRUNC((sysdate-HIRE_DATE) /7) 근무주수 from
emp order by 근무주수 desc, FIRST_NAME;
=>출력결과
Lex AD_VP 844
Hermann PR_REP 771
Shelley AC_MGR 771
Susan HR_REP 771
William AC_ACCOUNT 771
4. Student 테이블에서 제 1전공(deptno1) 이 101인 학과 학생들의 이름과 주민번호,
성별을 출력하되 성별은 주민번호 컬럼을 이용하여 7번째 숫자가 1일경우 '남자',
2일 경우 '여자'로 출력하시오.
select name, jumin, decode(substr(jumin,7,1), 1, '남자' ,2, '여자') from student where deptno1 =101;
댓글 ( 4)
댓글 남기기