Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발 일기

SELECT문 내용 정리 및 활용해보기 4 (feat. 날짜 함수, DECODE) 본문

SQL

SELECT문 내용 정리 및 활용해보기 4 (feat. 날짜 함수, DECODE)

개발 일기 2021. 7. 8. 22:07

안녕하세요!

 

어제에 이어 단일행 함수와 관련된 내용을 추가로 정리 해보겠습니다.

 

1. 날짜 관련 함수

 - 오라클은 날짜 타입을 저장 할 때, 내부적으로 세기, 년, 월, 일, 시, 분, 초 모두 저장

 - but, 화면에 표시되는 형식은 기본적으로 (RR/MM/DD) (DD-MON-RR) 이다.

 

SYSDATE 함수

 - 데이터베이스 서버에 설정되어 있는 날짜를 리턴

 

EX) SELECT SYSDATE FROM DUAL;

날짜 리턴

SYSTIMESTAMP 함수

 - 데이터베이스 서버에 설정되어 있는 날짜+시간 리턴

 

EX) SELECT SYSTIMESTAMP FROM DUAL;

날짜 + 시, 분, 초 노출 + 시차까지 확인

 

EXTRACT 함수

 - 년, 월, 일, 시, 분, 초 부분 추출 가능

 

EX) SELECT EXTRACT(YEAR FROM SYSDATE),

               EXTRACT(MONTH FROM SYSDATE),

               EXTRACT(DAY FROM SYSDATE)

               FROM DUAL; -- 년, 월, 일 추출

 

ROUND, TRUNC 함수

 - ROUND 함수 사용 시 절반(15일, 6개월 단위) 이상일 경우 올림

 - TRUNC 함수 사용 시 절반 단위 내림

 

EX) SELECT ROUND(SYSDATE, 'MONTH'), -- 07/08 기준 ROUND 함수 사용 시 15일 미만

               ROUND(SYSDATE, 'YEAR'), -- 21/07/08 기준 ROUND 함수 사용 시 6월 이상으로 22년으로 올림

               TRUNC(SYSDATE, 'MONTH'),

               TRUNC(SYSDATE, 'YEAR')

               FROM DUAL;

SYSDATE(7/8 기준)

 

2. 변환 함수

 - 데이터 타입을 다른 데이터 타입으로 변환하는 함수

 

 - TO_CHAR(type [, 'fmt']) : NUMBER 또는 DATE 타입을 'fmt'형식에 맞게 CHAR 타입으로 변환

 - TO_NUMBER(char [, 'fmt']) : CHAR 타입을 'fmt'형식에 맞게 NUMBER 타입으로 변환

 - TO_DATE(char [, 'fmt']) : CHAR 타입을 'fmt'형식에 맞게 DATE 타입으로 변환

 

3. 일반 함수

 - NVL(expr1, expr2) : expr1이 NULL이면 expr2를 리턴

 - NVL2(expr1, expr2, expr3) : expr1이 NULL이 아니면 expr2, NULL이면 expr3를 리턴

 

EX) SELECT SAL, COMM, NVL(COMM, 0), SAL+NVL(COMM,0) "총 급여" FROM TABLE;

COMM = NULL 이면 0을 리턴 후 합계 계산(NULL과는 합계 계산이 불가하기 때문)

 

 

4. DECODE 함수

  - 주어진 조건에 맞는 값과 일치하는 CASE를 리턴

 

-- 주어진 조건 = 'LEE', 일치하는 값 'LEE' , 2000 -> 2000 리턴

EX) SELECT DECODE('LEE', 'KIM', 1000, 'LEE', 2000, 'PARK', 3000) FROM DUAL;

'LEE' 조건과 만족 하는 경우 2000 리턴

 

-- NVL과 DECODE 함수를 활용한 코딩 예시

EX) SELECT NVL(DECODE(JOB, 'SALESMAN', SAL*1.6), SAL) "직급별 계산 급여" FROM TABLE;

 

  -> 풀이: DECODE = JOB이 'SALESMAN'과 일치하면 SAL을 *1.6 해라

              NVL = DECODE가 NULL이 아니면 SAL값을 넣어라

              즉 -> JOB이 SALESMAN인 사람만 찾아서 SAL(급여)1.6 해주고, 나머지는 그대로 적어라

 

 

 

5. CASE 함수

  - 여러개 CASE를 주고 해당하는 CASE에 맞을 때 설정한 리턴값을 반환

 

-- JOB에 따라 SAL 값에 변화를 줌

EX) SELECT (CASE WHEN JOB = 'CLERK' THEN SAL*1.2 -- JOB이 CLERK면 CLERK의 SAL을 1.2 곱해라

                        WHEN JOB = 'ANALYST' THEN SAL*1.3 -- JOB이 ANALYST면 ANALYST의 SAL을 1.3 곱해라

                        ELSE SAL -- 나머지는 기존 SAL 그대로

                        END) FROM TABLE;

 

 

감사합니다!

Comments