Post

[SQL] 여러가지 함수

📌 들어가며

오랜만의 SQL 시간! 이번 글에서는 숫자·날짜·변환·조건 함수를 다룬다. (작업은 SQL Developer에서 진행)


1. 숫자 함수 — ROUND

1
2
SELECT SALARY 월급, ROUND(SALARY/30, 0) 일급
FROM employees;

Desktop View

💡 ROUND(값, 자리)는 지정한 자리에서 반올림한다. 0이면 소수 첫째 자리에서 반올림해 일의 자리까지 나온다.

1
2
자리:  ... -2 -1 [0] 1  2 ...
값:         1  2 . 3  4  5   (0은 소수점 기준)

2. 날짜 함수

날짜에 +, -를 하면 날짜가 계산된다.

함수역할
SYSDATE현재 시스템 날짜
SYSDATE+1 / -1내일 / 어제
ADD_MONTHS(날짜, n)n개월 더하기
NEXT_DAY(날짜, 요일)가까운 요일 (일=1)
LAST_DAY(날짜)그 달의 마지막 날
ROUND(날짜, 'MONTH')월 기준 반올림
1
2
3
4
5
6
7
8
SELECT TO_CHAR(SYSDATE,'YY/MM/DD'), SYSDATE+1 TOMORROW, SYSDATE-1 YESTERDAY
FROM DUAL;

SELECT HIRE_DATE, ADD_MONTHS(HIRE_DATE, 3), ADD_MONTHS(HIRE_DATE, -3)
FROM employees WHERE EMPLOYEE_ID BETWEEN 100 AND 110;

SELECT HIRE_DATE, NEXT_DAY(HIRE_DATE, 1), LAST_DAY(HIRE_DATE)
FROM EMPLOYEES;

Desktop View Desktop View

💡 DUAL은 오라클의 가상 테이블로, 함수 결과만 확인할 때 쓴다.


3. 변환 함수

각 열에는 데이터 타입이 정해져 있어, SQL 실행 시 타입을 변환할 때가 있다. 자동(암묵적) 또는 수동(명시적)으로 변환한다.

1
SELECT 1 + '2' FROM DUAL;   -- '2'가 자동으로 숫자로 변환 → 3

⚠️ 자동 변환도 되지만, 안정성을 위해 수동 변환이 더 좋다.

함수역할
TO_CHAR(값, 형식)문자열로 변환
TO_DATE(값, 형식)날짜로 변환
1
2
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH:MI:SS PM') FROM DUAL;
SELECT TO_DATE('20211005','YYMMDD') FROM DUAL;

Desktop View


4. 조건 함수 — DECODE, NVL

DECODE — SQL의 IF

1
2
3
4
SELECT FIRST_NAME, SALARY 원래급여,
       DECODE(DEPARTMENT_ID, 60, SALARY*1.1, SALARY),        -- 값
       DECODE(DEPARTMENT_ID, 60, '10%인상', '현상 유지')      -- 라벨
FROM EMPLOYEES;

💡 DECODE(열, 조건, TRUE값, FALSE값). 부서가 60이면 급여 1.1배, 아니면 그대로. 정확히 일치하는 조건에 쓴다.

Desktop View

NVL — NULL 처리

1
2
SELECT SALARY * NVL(COMMISSION_PCT, 1)   -- NULL이면 1로
FROM EMPLOYEES ORDER BY COMMISSION_PCT;

💡 NVL(값, 대체값)은 값이 NULL이면 대체값으로 바꾼다. 위는 커미션이 NULL이면 1을 곱해 급여가 그대로 유지되게 한다.

Desktop View


📝 정리

1
2
3
4
5
SQL 함수
├─ 숫자   ROUND(값, 자리)
├─ 날짜   SYSDATE, ADD_MONTHS, NEXT_DAY, LAST_DAY
├─ 변환   TO_CHAR(문자), TO_DATE(날짜)
└─ 조건   DECODE(IF), NVL(NULL 처리)
함수한 줄 정의
ROUND지정 자리 반올림
TO_CHAR / TO_DATE문자 / 날짜 변환
DECODESQL의 IF (정확 일치)
NVLNULL을 대체값으로

SQL도 하나의 언어라 다양한 내장 함수를 제공한다. 특히 DECODE(조건 분기)NVL(NULL 처리)는 실무 쿼리에서 끝없이 쓰이니 확실히 익혀두자.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.