필드 또는 기준 항목의 비굣값을 구하거나, 목록에서 최솟값과 최댓값, 특정 값이 존재하는 구간 등을 구하는 함수를 실습한다.
13.1 DECODE()
‘기준값’이 ‘비굣값’과 같으면 ‘해당값’을 구하고, 그렇지 않으면 ‘미해당값’을 구한다.
•
DECODE(기준값, 비굣값, 해당값 [ , 미해당값]
•
DECODE(기준값, 비굣값1, 해당값1, 비굣값2, 해당값2, ..., 비굣값n, 해당값n [ , 미해당값]
예제1. 고객테이블에서 성별이 남성이면 ‘남’으로 바꾸고, 여성이면 ‘여’로 바꾼다. 모두 해당하지 않으면 ‘*’ 문자로 바꾼다.
SELECT CUSTOMER_CD,
CUSTOMER_NM,
MW_FLG,
DECODE(MW_FLG,'M','남','W','여','*')AS 성별,
TOTAL_POINT
FROM TB_CUSTOMER;
SQL
복사
예제2. 기타정보 테이블에서 관심품목 목록 값을 다음과 같이 바꾼다.
‘S01’을 포함하면 ‘의류/잡화’
‘S02’를 포함하면 ‘뷰티’
...등등등
INSTR 과 DECODE를 함께 사용해서 나타낸다.
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,'',',도서/취미')||
DEOCDE(INSTR(ITEM_LIST,'S09'),0,'',',컴퓨터')||
DECODE(INSTR(ITEM_LIST,'S10'),0,'',',브랜드'),2) -- SUBSTR로 ','를 제외하고 가져옴
AS 관심품목명
FROM TB_ETC_INFO;
SQL
복사
DECODE의 ‘0’은 즉 포함이 포함이 되어있는지 아닌지를 결정하는 기준값이 되는 것이다.
13.2 NVL()
NVL()함수는 ‘기준값’이 NULL값이면 ‘특정값’을 구하고, 아니면 ‘기준값’을 구한다. 예를 들어, “NVL(ADD_POINT, 50)” 의 결과는 ADD_POINT 필드의 값에 따라 다르다. ADD_POINT값이 있으면 ADD_POINT 값을 반환하고, 값이 없으면(즉, NULL이면) 50을 반환한다.
•
NVL(기준값, 특정값)
예제1. 고객테이블에서 전화번호에 값이 없으면 ‘XXX-XXXX-XXXX’을 보이고, 그렇지 않으면 기존 전화번호로 검색한다.
/* NVL */
SELECT CUSTOMER_CD,
CUSTOMER_NM,
MW_FLG,
BIRTH_DAY,
NVL(PHONE_NUMBER,'XXX-XXXX-XXXX')AS PHONE_NUMBER,
EMAIL
FROM TB_CUSTOMER;
SQL
복사
13.3 LEAST()
LEAST()함수는 입력한 ‘값1’, ’값2’, ‘값3’, ... 중에서 최솟값을 구한다. 값의 형식은 수치, 문자열, 날짜 등이다. 예를 들어, “LEAST(89,92,57)” 의 결과는 57이고, “LEAST(’F’,’B’,’C’)” 의 결과는 ‘B’다.
예제1. 12, -10, -3, 335, 200, 45 수치 중 최솟값을 구한다.
SELECT LEAST(12,-10,-3,335,200,45) AS LEAST_NUM
FROM DUAL;
SQL
복사
예제2. 현재 일시, 현재 일시+3일, 현재 일시-2 날자 중 최솟값을 구한다.
SELECT LEAST(SYSDATE, SYSDATE+3, SYSDATE-2) AS LEAST_DT
FROM DUAL;
SQL
복사
13.4 GREATEST()
GREATEST()함수는 입력한 값중에서 최댓값을 구한다. 마찬가지로 값의 형식은 수치, 문자열, 날짜등이다.
예제1. 12, -10, -3, 335, 200, 45 중에서 최댓값을 구한다.
SELECT GREATEST(12,-10,-3,335,200,45) AS GREAT_NUM
FROM DUAL;
SQL
복사
예제2. 현재 일시, 현재 일시+3일, 현재 일시-1일 날짜 중 최댓값을 구한다.
SELECT GREATEST(SYSDATE, SYSDATE+3, SYSDATE-1) AS GREAT_DATE
FROM DUAL;
SQL
복사
13.5 WIDTH_BUCKET()
WIDTH_BUCKET() 함수는 ‘시작값’에서 ‘종료값’까지를 ‘분할값’만큼 구간을 만들고 ‘기준값’이 어느 구간에 있는지 구한다. 예를들어, “WIDTH_BUCKET(15,1,50,10)” 의 결과는 1에서 50까지의 숫자 범위를 10개의 구간으로 나누고 15가 포함된 구간인 3을 반환한다.
•
WIDTH_BUCKET(기준값, 시작값, 종료값, 분할값)
예제1. 1에서 50까지의 숫자 범위를 10개 구간으로 나누고 38이 위치한 구간을 구한다.
SELECT WIDTH_BUCKET(38,1,50,10)
FROM DUAL;
SQL
복사
결과는 8이다.