1. 숫자 함수 (Number Functions)
숫자를 다룰 때 자주 사용하는 기본 함수와 예제입니다.
- 절대값: ABS(x)
- 올림: CEIL(x)
- 내림: FLOOR(x)
- 반올림: ROUND(x, n) (소수점 n자리)
- 절사: TRUNC(x, n) (소수점 n자리 이하 자름)
- 나머지: MOD(x, y)
-- 절대값
SELECT ABS(-1.234) AS absolute
FROM dual;
-- 올림 (ceil)
SELECT CEIL(-10.1234) AS ceil
FROM dual;
-- 내림 (floor)
SELECT FLOOR(10.1234) AS floor
FROM dual;
-- 반올림 (소수점 1자리, 소수점 첫째 자리에서 올림)
SELECT ROUND(192.153, 1) AS round_1
FROM dual;
-- 반올림 (소수점 -1자리: 10의 자리)
SELECT ROUND(192.153, -1) AS round_m1
FROM dual;
-- 절사 (소수점 2자리 이하 절사)
SELECT TRUNC(7.5597, 2) AS trunc
FROM dual;
-- 나머지
SELECT MOD(9, 4) AS mod
FROM dual;
1.1 주요 Oracle Number Functions
함수명 설명
ABS | 절대값 |
CEIL | x 이상 최소 정수 (올림) |
FLOOR | x 이하 최대 정수 (내림) |
ROUND | 반올림 |
TRUNC | 절사 |
MOD | 나머지 |
POWER | 거듭제곱 |
SQRT | 제곱근 |
LOG, LN | 로그 |
EXP | ex |
SIGN | 부호 |
BITAND | 비트 연산 |
REMAINDER | IEEE 모드 나머지 |
WIDTH_BUCKET | 히스토그램 버킷 할당 |
… | 기타 삼각함수, 쌍곡함수 등 다양 |
2. 문자열 함수 (String Functions)
Oracle 문자열 함수는 1-based 인덱스를 사용합니다.
음수 인덱스는 뒤에서부터 문자 위치를 지정합니다.
2.1 SUBSTR / SUBSTRB
- SUBSTR(str, start) : 시작 위치부터 끝까지
- SUBSTR(str, start, length) : 시작 위치부터 지정 길이만큼
- 음수 시작 위치: 끝에서부터 카운트
-- 3번째 문자부터 끝까지
SELECT SUBSTR('oracleclub', 3) AS name
FROM dual;
-- 3번째 문자부터 4글자
SELECT SUBSTR('oracleclub', 3, 4) AS name
FROM dual;
-- 뒤에서 3번째 문자부터 2글자 (음수 인덱스)
SELECT SUBSTR('oracleclub', -3, 2) AS name
FROM dual;
바이트 단위 슬라이싱 (SUBSTRB, LENGTHB)
Oracle에서 한글은 1자당 3바이트로 처리됩니다.
-- 바이트 단위로 자르기
SELECT SUBSTRB('오라클클럽', 1) AS part1 -- '오'
FROM dual;
SELECT SUBSTRB('오라클클럽', 5) AS part2 -- '클클럽'
FROM dual;
-- 전체 바이트 길이
SELECT LENGTHB('오라클클럽') AS byte_len
FROM dual;
2.2 REPLACE
문자열 내 패턴을 변경합니다. 대소문자를 구분하니 주의하세요.
-- oracle → db로 치환
SELECT REPLACE('oracleclub', 'oracle', 'db') AS replaced
FROM dual; -- 결과: 'dbclub'
3. 날짜형 함수 및 산술 연산 (Date Functions & Arithmetic)
3.1 TO_CHAR를 이용한 포맷팅
SELECT
TO_CHAR(SYSDATE, 'rrrr-mm-dd hh24:mi:ss') AS "지금시간",
TO_CHAR(SYSDATE - 1, 'rrrr-mm-dd hh24:mi:ss') AS "하루전시간",
TO_CHAR(SYSDATE - 1/24,'rrrr-mm-dd hh24:mi:ss') AS "1시간전시간",
TO_CHAR(SYSDATE - 1/24/60,'rrrr-mm-dd hh24:mi:ss') AS "1분전시간",
TO_CHAR(SYSDATE
- (5/24 + 30/24/60 + 10/24/60/60),
'rrrr-mm-dd hh24:mi:ss') AS "5시간30분10초전"
FROM dual;
3.2 날짜 산술 연산
연산 결과 타입 사용 목적
날짜 + 숫자 | 날짜 | 특정 일자부터 N일 후 |
날짜 - 숫자 | 날짜 | 특정 일자부터 N일 전 |
날짜 - 날짜 | 숫자 | 두 날짜 사이 일수 차이 |
-- 입대일자부터 18개월 후 전역일자 계산
SELECT
SYSDATE AS 입대일자,
ADD_MONTHS(SYSDATE, 18) AS 전역일자
FROM dual;
-- 태어난 날부터 오늘까지 총 일수, 마지막 날짜
SELECT
SYSDATE - TO_DATE('1990-04-05','yyyy-mm-dd') AS 살아온일수,
LAST_DAY(SYSDATE) AS 이번달_말일
FROM dual;
-- 살아온 개월수
SELECT
MONTHS_BETWEEN(SYSDATE, TO_DATE('1990-04-05','yyyy-mm-dd'))
AS 살아온개월수
FROM dual;
4. 실습 문제: 근속 개월수, 연수, 잔여월수 조회
문제 설명
사원 테이블(sawon)에서 현재일자 기준으로 아래 항목을 조회하세요.
- 근속총월수
- 근속년수 (총월수 ÷ 12, 소수 이하 절사)
- 잔여월수 (총월수 mod 12)
해답 예시
SELECT
sabun,
saname,
sajob,
sahire,
TRUNC(
MONTHS_BETWEEN(SYSDATE, sahire)
) AS 근속총월수,
FLOOR(
TRUNC(MONTHS_BETWEEN(SYSDATE, sahire)) / 12
) AS 근속년수,
MOD(
TRUNC(MONTHS_BETWEEN(SYSDATE, sahire)), 12
) AS 잔여월수
FROM sawon;
- MONTHS_BETWEEN(date1, date2) : 두 날짜 사이 개월수 계산
- TRUNC() : 소수점 이하 절사
- FLOOR() : 내림 처리
- MOD(x, y) : 나머지 계산
'Oracle' 카테고리의 다른 글
Oracle SQL 서브쿼리(Subquery)와 집합 연산자 (4) | 2025.08.13 |
---|---|
Oracle DECODE, CASE, NVL/NVL2, VIEW 함수 정리 및 예제 (4) | 2025.08.08 |
Oracle SQL 조회 및 문자열 연산 정리 (4) | 2025.08.08 |
Oracle 테이블 제약조건 정리 (7) | 2025.08.07 |
Oracle 데이터 타입 정리 (0) | 2025.08.06 |