반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 자바연습문제
- oauth
- java
- 패스트캠퍼스
- 쿼리
- SQL
- 스프링의정석
- 자바기초
- 인프런
- Oracle
- cleanbuild
- 기초쿼리
- Spring
- ApplicationContext
- SpringFramework
- 국비지원
- 자바문제
- 소셜로그인
- 자바
- 남궁성
- 불친절한SQL
- 패캠
- mariadb
- 클린빌드
- MySQL
- 오라클
- 스프링
- 자바의정석
- devcamp
- RDBMS
Archives
- Today
- Total
Darren's Devlog
[불친절한SQL] 기초쿼리, 인코딩 디코딩 함수 본문
반응형
○ 인코딩 디코딩 함수
값을 인코딩하거나 디코딩하는 함수이다.
DECODE 함수
DECODE 함수는 expr과 search가 일치하면 result, 모두 일치하지 않으면 default를 반환한다.
default를 지정하지 않으면 NULL을 반환한다.
result와 default의 데이터 타입은 첫 번째 result의 데이터 타입과 동일해야 한다.
expr과 데이터 타입이 다른 search는 expr의 데이터 타입으로 변환된다.
DECODE(expr, search, result [, search, result]··· [, default])
SELECT DECODE(1, 1, 'A', 2, 'B', 'C') AS c1
, DECODE(2, 1, 'A', 2, 'B', 'C') AS c2
, DECODE(3, 1, 'A', 2, 'B', 'C') AS c3
FROM DUAL;
SELECT DECODE('A', 1, 2 ) AS c1 FROM DUAL; --에러
SELECT DECODE(1 , 2, 1, 'A') AS c1 FROM DUAL; --에러
아래 쿼리에서 c1열은 VARCHAR2 타입, c2 열은 NUMBER 타입으로 반환한다.
DECODE 함수의 첫 번째 result가 NULL이면 VARHCAR2 타입으로 평가되기 때문이다.
SELECT DECODE(2, 1, NULL , 9) AS c1
, DECODE(2, 1, TO_NUMBER(NULL), 9) AS c2
FROM DUAL;
DECODE 함수로 NULL을 평가할 수 있지만, c2 열처럼 NVL2 함수를 사용하는 편이 좀 더 간결하다.
SELECT DECODE(1, NULL, 'A', 'B') AS c1, NVL2(1, 'B', 'A') AS c2 FROM DUAL;
아래 쿼리의 c1열은 deptno가 30이고, dname이 SALES고, loc이 CHICAGO면 Y를 반환한다.
DECODE 함수가 중첩되면 쿼리의 가독성이 나빠지고 성능이 저하될 수 있다.
결합 연산자를 사용하면 DECODE 함수의 중첩을 제거할 수 있다.
SELECT DECODE(deptno, 30, DECODE(dname, 'SALES', DECODE(loc, 'CHICAGO', 'Y'))) AS c1 FROM dept;
SELECT DECODE(deptno || dname || loc, '30SALESCHICAGO', 'Y') AS c2 FROM dept;
숫자 값에 결합 연산자를 사용하면 암시적 데이터 변환이 발생하므로
아래 쿼리처럼 CASE 표현식을 사용하는 편이 바람직하다.
SELECT CASE WHEN deptno=30 AND dname='SALES' AND loc='CHICAGO' THEN 'Y' END AS c1 FROM dept;
반응형
'SQL' 카테고리의 다른 글
[불친절한SQL] 기초쿼리, WHERE절 - 2 (0) | 2022.12.04 |
---|---|
[불친절한SQL] 기초쿼리, WHERE절 - 1 (0) | 2022.12.04 |
[불친절한SQL] 기초쿼리, 비교 함수 (0) | 2022.12.03 |
[불친절한SQL] 기초쿼리, 널 관련 함수 (0) | 2022.12.03 |
[불친절한SQL] 기초쿼리, 변환 함수 (0) | 2022.12.03 |
Comments