/*
<선택함수>
- 여러가지 경우에 선택을 할 수 있는 기능을 제공하는 함수
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
댓글