본문 바로가기
Study/SQL

8.선택함수

by 로롤로롱 2023. 4. 30.

/*
<선택함수>
    - 여러가지 경우에 선택을 할 수 있는 기능을 제공하는 함수
1) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, ..., false 결과값)
*/

-- 컬럼의 값이 조건과 일치하는지 판단
SELECT DECODE(SUBSTR('1111294056520',7,1), '1', '남자', '2', '여자', '3', '남자', '4', '여자', '잘못입력함') FROM DUAL;

-- 주민등록번호를 가지고 나이를 추출
-- 1900년생과 2000년생
SELECT TO_CHAR(SYSDATE,'YYYY')-(DECODE(SUBSTR('1111294056520',7,1), '1', '19', '2', '19', '3', '20', '4', '20', '잘못입력함')||SUBSTR('1111294056520',1,2)) AS 나이
FROM DUAL;

SELECT TO_CHAR(SYSDATE,'YYYY')-(DECODE(SUBSTR('9511291265952',7,1), '1', '19', '2', '19', '3', '20', '4', '20', '잘못입력함')||SUBSTR('9511294265952',1,2)) AS 나이
FROM DUAL;

CREATE TABLE User01 (
    name VARCHAR2(30),
    jumin CHAR(13),
    telno VARCHAR2(20)
);

INSERT INTO User01 VALUES('이름', '1111294056520', '010-0000-0000');
INSERT INTO User01 VALUES('이름1', '9511291265952', '010-1111-1111');

SELECT jumin FROM user01;

SELECT (DECODE(SUBSTR(jumin,7,1), '1','19','2','19','3','20','4','20','X')||SUBSTR(jumin,1,2))
FROM user01;

-- 직급코드가 AD_VP이면 10%인상 SA_REP이면 15% IT_PROG이면 20% 그외 5% 
SELECT emp_name AS 이름,salary AS 인상전, DECODE(job_id, 'AD_VP', salary*1.1, 'SA_REP', salary*1.15, 'IT_PROG', salary*1.2, salary*1.05) AS 인상후
FROM emp;

/*
2) CASE
    CASE WHEN 조건식1 THEN 결과값1
         WHEN 조건식2 THEN 결과값2
         ...
         ELSE 결과값
    END
*/

-- user01 테이블 주민번호 성별 출력
SELECT jumin, CASE
                WHEN SUBSTR(jumin,7,1)=1 OR SUBSTR(jumin,7,1)=3 THEN '남'
                WHEN SUBSTR(jumin,7,1)=2 OR SUBSTR(jumin,7,1)=4 THEN '여'
                ELSE 'X'
              END AS 성별
FROM user01;

SELECT TO_CHAR(SYSDATE,'YYYY')-cust_year_of_birth AS 나이, 
CASE
WHEN FLOOR((TO_CHAR(SYSDATE,'YYYY')-cust_year_of_birth)/10) = 3 THEN '30대'
WHEN FLOOR((TO_CHAR(SYSDATE,'YYYY')-cust_year_of_birth)/10) = 4 THEN '40대'
WHEN FLOOR((TO_CHAR(SYSDATE,'YYYY')-cust_year_of_birth)/10) = 5 THEN '50대'
ELSE '기타'
END AS 연령대
FROM customers
ORDER BY 나이;

/*
기타함수
GREATEST(컬럼, 컬럼, ...)
    - 매개변수로 들어오는 값 중 가장 큰 값을 반환
    
LEAST(컬럼, 컬럼, ...)
    - 매개변수로 들어오는 값 중 가장 작은 값을 반환
*/

SELECT GREATEST(1,2,3,4), LEAST(1,2,3,4)
FROM DUAL;

SELECT GREATEST('A','a',3,4), LEAST('A','a',3,4)
FROM DUAL;

SELECT GREATEST('강감찬', 'smith', '세종대왕'), LEAST('강감찬', 'smith', '세종대왕')
FROM DUAL;

'Study > SQL' 카테고리의 다른 글

10.DDL  (0) 2023.05.02
9.그룹함수  (0) 2023.05.01
7.NULL처리 함수  (0) 2023.04.29
6.형변환함수  (0) 2023.04.28
5.날짜함수  (0) 2023.04.27

댓글