Oracle SQL 함수 가이드
이 글은 Oracle SQL 함수의 레퍼런스입니다. 자주 찾는 함수를 표와 예시로 정리했습니다. 필요할 때 열어보는 매뉴얼로 쓰세요.
이전 글: Oracle SQL 기초 가이드 · 다음 글: Oracle SQL 조회 심화 가이드
문자 함수
| 함수 | 설명 | 예시 → 결과 |
|---|---|---|
UPPER / LOWER |
대/소문자 변환 | UPPER('abc') → ABC |
SUBSTR(s, m, n) |
m번째부터 n글자 자르기 | SUBSTR('HELLO',2,3) → ELL |
INSTR(s, t) |
t의 위치 찾기 | INSTR('HELLO','L') → 3 |
LENGTH(s) |
길이 | LENGTH('홍길동') → 3 |
TRIM / LTRIM / RTRIM |
공백 제거 | TRIM(' a ') → a |
REPLACE(s, a, b) |
a를 b로 치환 | REPLACE('a-b','-','/') → a/b |
LPAD / RPAD(s,n,c) |
n자리로 채우기 | LPAD('7',3,'0') → 007 |
CONCAT / || |
문자열 잇기 | 'A' || 'B' → AB |
숫자 함수
| 함수 | 설명 | 예시 → 결과 |
|---|---|---|
ROUND(n, d) |
반올림 | ROUND(3.456,1) → 3.5 |
TRUNC(n, d) |
버림(자르기) | TRUNC(3.456,1) → 3.4 |
MOD(a, b) |
나머지 | MOD(10,3) → 1 |
CEIL / FLOOR |
올림 / 내림 | CEIL(3.1) → 4 |
ABS(n) |
절대값 | ABS(-5) → 5 |
POWER(a, b) |
거듭제곱 | POWER(2,3) → 8 |
날짜 함수
SELECT SYSDATE FROM DUAL; -- 현재 날짜·시간
SELECT SYSTIMESTAMP FROM DUAL; -- 정밀 시간(타임존 포함)
-- 날짜 연산
SELECT SYSDATE + 7 FROM DUAL; -- 7일 후
SELECT SYSDATE - HIRE_DATE FROM EMPLOYEE; -- 두 날짜 차이(일수)
-- 함수
SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL; -- 3개월 후
SELECT MONTHS_BETWEEN(SYSDATE, HIRE_DATE) FROM EMPLOYEE; -- 개월 수 차이
SELECT LAST_DAY(SYSDATE) FROM DUAL; -- 그 달의 마지막 날
SELECT TRUNC(SYSDATE) FROM DUAL; -- 시간 떼고 자정으로
Oracle의
DATE는 날짜에 정수를 더하면 “일”,1/24를 더하면 “시간” 단위로 계산됩니다.
변환 함수 (형 변환)
-- 날짜 → 문자
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY"년" MM"월" DD"일"') FROM DUAL;
-- 숫자 → 문자(자릿수 콤마)
SELECT TO_CHAR(1234567, 'FM999,999,999') FROM DUAL; -- 1,234,567
-- 문자 → 날짜
SELECT TO_DATE('2026-06-01', 'YYYY-MM-DD') FROM DUAL;
-- 문자 → 숫자
SELECT TO_NUMBER('1500') FROM DUAL;
자주 쓰는 날짜 포맷: YYYY(연), MM(월), DD(일), HH24(24시간제), MI(분), SS(초), DAY(요일 전체), DY(요일 약자)
NULL 처리 함수
SELECT NVL(COMMISSION, 0) FROM EMPLOYEE; -- NULL이면 0
SELECT NVL2(COMMISSION, 'Y', 'N') FROM EMPLOYEE; -- 값 있으면 Y, 없으면 N
SELECT COALESCE(TEL, MOBILE, '연락처없음') FROM EMPLOYEE; -- 처음 만나는 NOT NULL
SELECT NULLIF(A, B) FROM DUAL; -- A=B면 NULL, 아니면 A
| 함수 | NULL일 때 | 값이 있을 때 |
|---|---|---|
NVL(a, b) |
b 반환 | a 반환 |
NVL2(a, x, y) |
y 반환 | x 반환 |
COALESCE(a,b,c…) |
다음 인자 확인 | 처음 NOT NULL 값 |
조건 분기 (CASE / DECODE)
CASE
SELECT EMP_NAME,
CASE
WHEN SALARY >= 7000 THEN '상'
WHEN SALARY >= 5000 THEN '중'
ELSE '하'
END AS GRADE
FROM EMPLOYEE;
특정 값과 같은지만 볼 때는 간단형을 쓸 수 있습니다.
SELECT CASE DEPT_ID
WHEN 10 THEN '개발'
WHEN 20 THEN '품질'
ELSE '기타'
END AS DEPT_KOR
FROM EMPLOYEE;
DECODE
SELECT EMP_NAME,
DECODE(DEPT_ID, 10, '개발', 20, '품질', '기타') AS DEPT_KOR
FROM EMPLOYEE;
DECODE(컬럼, 값1, 결과1, 값2, 결과2, …, 기본값). 등호(=) 비교만 됩니다. 범위(>=)가 필요하면 CASE를 써야 합니다.
정리
함수는 외우기보다 필요할 때 찾는 게 효율적입니다. 흐름상 다음은 조회를 확장하는 집계·조인·서브쿼리입니다.
다음 글: Oracle SQL 조회 심화 가이드