데이터베이스 함수 예제
--EMP 테이블에서 이름이 다섯글자인 사람들의 사원번호,이름 그리고
--사원번호 앞 두자리와 뒤 두자리는 *로 출력하고
--이름의 첫글자와 나머지 글자는 *로 출력
정답
SELECT EMPNO, ENAME,
SUBSTR(EMPNO,1,2) || '**' AS 사원번호처리,
RPAD (SUBSTR(ENAME,1,1), LENGTH(ENAME), '*') AS 이름처리
FROM EMP
WHERE LENGTH(ENAME)=5;
결과
--EMP 테이블에서 사원들의 평균 근무일수는 20일이다
--하루 근무시간 8시간으로 처리했을때
--일당과 시급을 계산해서 출력
--결과는 사원번호, 이름, 급여, 일당, 시급 순으로 출력하고
--일당은 소수 세째자리에서 버림
--시급은 소수 둘째자리에서 반올림
정답
SELECT EMPNO, ENAME, SAL,
TRUNC(SAL/20,2) AS 일당,
ROUND(SAL/20/8,1) AS 시급
FROM EMP;
결과
--EMP테이블에서 입사일을 기준으로 3개월이 지난 첫째주 월요일에
--정직원이 된다. 사원들이 정직원이 되는날짜를 YYYY-MM-DD형식으로 출력
--단,추가수당이 없는 사원의 추가 수당은 'N/A'로 출력
--결과는 사원번호, 이름, 입사일, 정직원날짜,추가수당 순으로 출력
정답
SELECT EMPNO,ENAME,HIREDATE,
--입사기준 3개월 뒤 날짜 -> 첫째주 월요일이 몇월몇일 -> 형식바꾸기
TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE,3),'월요일'),'YYYY-MM-DD') AS 정직원날짜,
NVL(TO_CHAR(COMM),'N/A')
--COMM컬럼의 데이터 타입이 NUMBER이라 문자형으로 형변환(N/A는 문자이므로 다른 형태끼리는 계산 불가)
FROM EMP;
결과
--EMP테이블에서 사원들에 직속상관 번호를 아래 조건에 맞게 변화해서 출력
--직속상관이 없으면 0000
--직속상관 번호 앞 두자리가 75-> 5555
--직속상관 번호 앞 두자리가 76-> 6666
--직속상관 번호 앞 두자리가 77-> 7777
--직속상관 번호 앞 두자리가 78-> 8888
--나머지는 해당 직속상관 사원번호 그대로 출력
정답
SELECT EMPNO, ENAME, MGR,
CASE
WHEN MGR IS NULL THEN '0000'
WHEN SUBSTR(MGR,1,2)='75' THEN '5555'
WHEN SUBSTR(MGR,1,2)='76' THEN '6666'
WHEN SUBSTR(MGR,1,2)='77' THEN '7777'
WHEN SUBSTR(MGR,1,2)='78' THEN '8888'
ELSE TO_CHAR(MGR)
END AS 변환번호
FROM EMP;
결과