본문 바로가기
Coding/데이터베이스

[오라클] 복습예제2 LENGTH/CASE ~WHEN~ THEN/SUBSTR

by 찡콩찡 2022. 4. 4.
--1.사원의 이름이 5자 이상인 사원의 정보
SELECT * FROM EMP where length(ENAME)>=5;

--2.사원명, 사원명의 첫 2자를 찍고 * 두개 찍기(별칭:mask_name) 
    substra(속성,몇번째,몇글자 ), rpad(속성,전체글자수, 채울문자)

SELECT SUBSTR(ENAME,1,2)||'*'FROM EMP;
SELECT CONCAT(SUBSTR(ENAME,1,2),'**') FROM EMP;
SELECT RPAD(SUBSTR(ENAME,1,2),4,'*') AS MASK_ENAME FROM EMP;
SELECT SUBSTR(ENAME,1,1) FROM EMP;
SELECT RPAD(SUBSTR(ENAME,1,1),LENGTH(ENAME),'*') FROM EMP;

--3.사원명, 상원명의 첫글자+나머지는 *로 채우기
select from emp where ename as MASKING_ENAME 
SELECT RPAD(SUBSTR(ENMAE,1,1),LENGTH(ENAME),'*')FROM EMP;

--4.사원명, 사원명의 첫글자+나머지는 * 로 채우기 별칭 MASKING_ENAME 
     단 사원의 이름이 5글자인 사원대상
SELECT RPAD(SUBSTR(ENAME,1,1),LENGTH(ENMAE),'*')
FROM EMP WHERE LENGTH(ENAME)>=5;

--5.사원번호, 사원명, 급여, 일당(한달 21.5일 근무,소수이하 버림(TRUNC)->별칭DAY_PAY  시급(단, 하루에 8시간 근무)-->
   TIME_PAY

SELECT EMPNO,ENAME,SAL,TRUNC(SAL/21.5)AS DAY_PAY,
SAL,ROUND(SAL/21.5/8,1) AS TIME_PAY FROM EMP;

--6. 사원번호, 이름, 입사일,입사한지 3개월되는 날짜
SELECT EMPNO,ENAME,HIREDATE, ADD_MONTHS(HIREDATE,3) FROM EMP;

--7. 사원번호,입사한지 3개월이 지난 월요일을 구ㅏ되 2022-04-04 형식으로 출력하고 별칭 R_JOB
SELECT EMPNO,ENAME,HIREDATE,
TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE,3),'월'),'YYYY-MM-DD')AS R_JOB FROM EMP;

--8.사원번호, 급여, 보너스,보너스가 NULL이면 0 ,보너스가 NULL이면 'N.A'로 출력
SELECT EMPNO, SAL, COMM, NVL(COMM,0) AS COMM1, 
NVL(TO_CHAR(COMM), 'M/A') AS COMM2 FROM EMP;

--9.사원번호, 이름,관리자번호,관리자번호가 NULL이면 '0000',
                             첫 2글자 '78'이면 '8888',
                             첫 2글자 '77'이면 '7777',
                             첫 2글자 '76'이면 '6666',
                             첫 2글자 '75'이면 '5555', 
                             그 외: 관리자번호 그대로
CASE WHEN A THEN 값1
     WHEN B THEN 값2
     WHEN C THEN 값3
     ELSE 값4 END AS __ ;
SELECT EMPNO,ENAME,MGR, 
     CASE WHEN MGR IS NULL THEN '0000'
     WHEN SUBSTR(MGR,1,2)=78 THEN '8888'
     WHEN SUBSTR(MGR,1,2)=77 THEN '7777'
     WHEN SUBSTR(MGR,1,2)=76 THEN '6666'
     WHEN SUBSTR(MGR,1,2)=75 THEN '5555'
     ELSE TO_CHAR(MGR) 
     END AS CHG_MGR 
FROM EMP;