문자·숫자·날짜 함수

SQL 기본 및 활용 · 함수

이 페이지의 목차

핵심 요약

단일행 함수가 입력 행마다 결과 한 건을 만드는 원리와 자주 나오는 함수 조합을 익힌다.

학습 목표

  • 문자·숫자·날짜 함수의 입력과 결과를 예측한다.
  • 날짜 계산에서 SYSDATE, ADD_MONTHS, MONTHS_BETWEEN을 구분한다.

본문

개념 지도

도식
입력 값과 타입 확인→함수 적용→NULL·NLS·형변환 확인→결과 타입 검증

핵심 내용

단일행 함수는 입력 행마다 결과를 하나씩 반환하며 중첩할 수 있다.

  • 문자: UPPER, LOWER, SUBSTR, INSTR, LENGTH, TRIM, REPLACE
  • 숫자: ROUND, TRUNC, MOD, CEIL, FLOOR
  • 날짜: SYSDATE, ADD_MONTHS, MONTHS_BETWEEN, LAST_DAY, NEXT_DAY
SQL
SELECT SUBSTR('SQLP-2026', 1, 4),
       ROUND(123.456, 2),
       ADD_MONTHS(DATE '2026-01-31', 1)
FROM dual;

Oracle에서 문자열 위치는 기본적으로 1부터 센다. ROUND(date, 'MM')과 TRUNC(date, 'MM')도 숫자 함수와 비슷한 이름이지만 날짜 경계를 다룬다. 월말 날짜에 월을 더할 때는 달마다 날짜 수가 다르므로 ADD_MONTHS의 규칙을 확인한다.

함수군별 대표 예

SQL
SELECT UPPER('Kim'),
       SUBSTR('ORACLE', 2, 3),
       INSTR('BANANA', 'NA')
FROM dual;
SQL
SELECT ROUND(123.456, 2),
       TRUNC(123.456, 2),
       MOD(10, 3)
FROM dual;
SQL
SELECT TRUNC(SYSDATE, 'MM') AS month_start,
       ADD_MONTHS(DATE '2026-01-31', 1) AS next_month,
       MONTHS_BETWEEN(DATE '2026-03-31', DATE '2026-01-31')
FROM dual;

ROUND와 TRUNC는 숫자와 날짜에 모두 사용되지만 결과 의미가 다르다. ADD_MONTHS는 월말 규칙을 가지므로 일수 더하기와 같지 않다.

함수 적용 위치와 결과

SQL
-- Column을 가공
WHERE TRUNC(order_date) = DATE '2026-07-27'

-- 원본 범위 사용
WHERE order_date >= DATE '2026-07-27'
  AND order_date <  DATE '2026-07-28'

두 SQL은 날짜에 시간 값이 포함될 수 있는지와 NULL 처리 방식이 같을 때에만 같은 결과를 만든다. 함수 적용 전후의 경계값을 예제로 확인한다.

NLS와 타입

TO_CHAR·TO_DATE는 Format Model을 명시하고, 월 이름·소수점·통화 기호처럼 NLS 의존 결과를 외부 Interface Key로 사용하지 않는다. 함수의 반환 타입이 다음 비교·정렬에서 어떤 변환을 유발하는지도 확인한다.


시험 포인트

문항 풀이 보강: 함수 결과를 손으로 계산하기

단일행 함수는 입력 행마다 한 결과를 반환하므로 1:M 조인의 M쪽 행에도 사용할 수 있다. 다중행 함수는 여러 입력 행을 한 값으로 요약한다. 두 종류 모두 “최종 반환값 하나”일 수 있으므로 반환 개수만으로 분류하지 않는다.

문자 함수

SQL
SUBSTR('SQL STUDY', 1, 3)  -- SQL
INSTR('SQL STUDY', 'S')  -- 첫 S의 위치
TRIM(CHR(10) FROM text_col)  -- 지정 문자를 양 끝에서 제거

TRIM은 문자열 중간의 줄바꿈까지 제거하지 않는다. REPLACE는 문자열 전체에서 일치 부분을 바꾼다. LENGTH는 문자 수, LENGTHB는 바이트 수다.

숫자 함수

식의미
ROUND(15.46, 1)15.5
TRUNC(15.46, 1)15.4
CEIL(3.1)4
FLOOR(3.9)3
MOD(10, 3)1

날짜 함수

ADD_MONTHS, LAST_DAY, NEXT_DAY, MONTHS_BETWEEN의 입력과 반환 타입을 확인한다. 날짜에 1/24를 더하면 한 시간, 1/24/60을 더하면 일 분이다.

문제에 적용하는 순서

안쪽 함수부터 계산하고 각 중간값의 타입을 적는다. 줄바꿈은 CHR(10), 날짜는 일수 단위라는 점을 먼저 표시한 뒤 바깥 함수를 계산한다.

자주 틀리는 부분

  • ROUND와 TRUNC는 반올림과 버림의 차이다.
  • LENGTH는 문자 길이, LENGTHB는 바이트 길이로 다국어 문자열에서 다를 수 있다.
  • 함수의 입력 타입과 반환 타입을 확인하고 NULL 입력의 결과도 함께 점검한다.

복습 문제

답을 생각한 뒤 정답과 근거를 펼쳐 보세요.

01

문자열에서 부분 문자열의 위치를 찾는 함수는?

정답과 근거

Oracle에서는 INSTR가 부분 문자열의 시작 위치를 반환합니다.

02

월의 마지막 날짜를 구하는 함수는?

정답과 근거

LAST_DAY가 해당 날짜가 속한 달의 마지막 날짜를 반환합니다.

03

INSTR와 SUBSTR가 각각 반환하는 값은 무엇이며 찾는 위치를 이용해 부분 문자열을 어떻게 추출하는가?

정답과 근거

INSTR는 위치를 숫자로 반환하고 SUBSTR는 시작 위치와 길이에 해당하는 문자열을 반환합니다. INSTR 결과를 SUBSTR의 시작점이나 길이 계산에 사용할 수 있습니다.