NVL(칼럼, 변환 수) - NULL을 다른값으로 치환
select ename, sal, comm, NVL(comm, 1) , sal + NVL(comm, 0) from emp;
NVL2(칼럼, 변환 값1, 변환 값2)
칼럼이 NULL이 아닌 경우에는 변환값1, NULL인 경우 변환값2
변환값1, 변환값 2는 데이터 입이 동일해야 함
select ename, comm, NVL2(comm, comm+700, 100) from emp;
select
player_name,
nation,
NVL2(nation, nation, '한국'),
NVL2(nation, nation||'인', '한국인')
from player;
NULLIF(칼럼, 비교 값) - 비교 값 또는, NULL 반환
칼럼 값 == 비교 값 이면 NULL, != 이면 찾는 값는 반환
단, expr1에 NULL을 지정할 수 없음
SELECT
ename,
job,
NULLIF(job, 'SALESMAN') AS result
FROM
emp
WHERE
deptno = 30;
COALESCE(칼럼1, 칼럼2, ...., 반환 값)
나열된 칼럼을 순차적으로 체크하여 NULL이 아닌 첫번째 인수를 반환
모든 인수가 NULL인 경우 마지막 반환 값이 입력
SELECT
ename,
comm,
sal,
COALESCE(comm, sal, 50) result
FROM
emp;
DECODE(칼럼, IF1, THEN1, IF2, THEN2, ... Default )
칼럼값이 IF1 일경우 THEN1 값, IF2인 경우 THEN2
일치하는 것을 발견하지 못한 경우 마지막 default 값,
Default 가 생략되면 NULL 반환
예제 1)
select ename, sal, DECODE(sal, 3000, 'A', 5000, 'S', '탈락') from emp;
예제 2)
SELECT
empno,
ename,
sal,
job,
decode(job, 'clerk', sal * 1.2, 'MANAGER', sal * 1.3,
'SALESMAN', sal * 1.5, sal) result
FROM
emp;
예제 1)
예제 3)
SELECT
CUSTOMER_CD,
CUSTOMER_ENG_NM,
ITEM_LIST,
SUBSTR(
DECODE(INSTR(ITEM_LIST,'S01'),0,'',',의류/잡화') ||
DECODE(INSTR(ITEM_LIST,'S02'),0,'',',뷰티') ||
DECODE(INSTR(ITEM_LIST,'S03'),0,'',',레저/자동차') ||
DECODE(INSTR(ITEM_LIST,'S04'),0,'',',식품') ||
DECODE(INSTR(ITEM_LIST,'S05'),0,'',',생활/건강') ||
DECODE(INSTR(ITEM_LIST,'S06'),0,'',',가구/인테리어') ||
DECODE(INSTR(ITEM_LIST,'S07'),0,'',',가전') ||
DECODE(INSTR(ITEM_LIST,'S08'),0,'',',도서/취미') ||
DECODE(INSTR(ITEM_LIST,'S09'),0,'',',컴퓨터') ||
DECODE(INSTR(ITEM_LIST,'S10'),0,'',',브랜드'),2)
AS 관심품목명
FROM
TB_ETC_INFO;
SUBSTR(문자열, 시작위치[, 길이]) 길이 생략시 끝까지 표현
시작위치 2를 선언하여 공통으로 들어가는 ',' 뒤인 2번째 자리부터 시작하여 끝까지
예제3) 성별 구분하기
select
student_name,
student_ssn,
substr(student_ssn, 8, 1) substr_rst,
decode(substr(student_ssn, 8, 1),'1','남자','2','여자','모름') SEX
from tb_student;
CASE WHEN
CASE
WHEN 조건1 THEN '값1'
WHEN 조건2 THEN '값2'
WHEN 조건3 THEN '값3'
...
ELSE '값'
END
SELECT
ename,
sal,
CASE
WHEN sal < 3000 THEN 'A팀'
WHEN sal >= 5000 THEN 'S팀'
ELSE '탈락'
END AS gubun
FROM
emp;
SELECT
ENAME,
SAL,
CASE
WHEN ENAME LIKE 'A%' THEN 'A팀'
WHEN ENAME LIKE 'M%' THEN 'M팀'
ELSE '기타'
END AS GUBUN
FROM
EMP;
select
student_no,
point,
case when point >= 4.0 then 'A'
when point >= 4.0 then 'B'
when point >= 4.0 then 'C'
else 'F'
end as 학점
from tb_grade
'스터디 > Oracle' 카테고리의 다른 글
[Oracle / 오라클] 집합 연산자 UNION, UNION ALL, MINUS, INTERSECT (0) | 2023.06.19 |
---|---|
[Oracle / 오라클] group by, count, sum (0) | 2023.06.19 |
[Oracle/오라클] LEAD() 다음 레코드 값, LAG() 이전 레코드 값 조회 (0) | 2021.10.19 |
[Oracle/오라클] FIRST_VALUE() 필드의 첫번째 값, LAST_VALUE() 마지막 값 구하기 (0) | 2021.10.19 |
[오라클/Oracle] INSTER, SUBSTR, REPLACE (0) | 2021.09.18 |