ORACLE

 

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;


 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

그림에 있어서는 먼저 밑그림을 잘해야 되고 색채를 입히는 것은 그 뒤에 하는 일이다. 밑그림을 그리는 것은 눈에 띄지 않는 작업이다. 그러나 단단한 밑그림(素) 없이는 훌륭한 좋은 그림은 그릴 수가 없다. 몸을 장식하는 것보다는 먼저 수양에 힘써서 마음의 진실을 근본으로 삼아야 한다. -논어

댓글 ( 4)

댓글 남기기

작성