DBMS/개념

09_ 날짜와 시간 함수

seungwon-1 2025. 9. 25. 20:02

데이터베이스를 다루다 보면 날짜와 시간 처리가 생각보다 자주 필요하다.

"이번 달 입사한 직원은 누구지?", "6개월 이상 근무한 사람은 몇 명이지?" 같은 질문은 회사 데이터에서 쉽게 등장한다.

꼭 알아야 하는 게 바로 날짜·시간 함수다.


SYSDATE, CURRENT_DATE, ADD_MONTHS, MONTHS_BETWEEN 같은 날짜/시간 함수들을 정리했다.

1. SYSDATE – 현재 날짜와 시간

SYSDATE는 데이터베이스 서버 기준의 현재 날짜와 시간을 반환한다. 단순히 오늘 날짜를 보는 것뿐 아니라, 다른 날짜 함수랑 조합해서 분석할 때 많이 쓰인다.

-- 단순히 현재 날짜와 시간 출력
SELECT SYSDATE FROM DUAL;

-- 직원 정보와 현재 날짜 함께 보기
SELECT employee_id, last_name, hire_date, SYSDATE AS current_date
FROM employees
WHERE ROWNUM <= 5;

활용 예시:

  • 직원 입사일과 지금 시각을 함께 출력해서 얼마나 차이가 나는지 확인 가능.
  • 로그 기록에서 “현재 서버 시간”을 기준으로 필터링할 때도 사용.

 

2. CURRENT_DATE – 로컬 타임

CURRENT_DATE는 사용자 세션의 로컬 시간대 기준으로 현재 날짜를 반환한다.
서버가 해외에 있더라도, 접속하는 사용자의 로컬 타임을 기준으로 보고 싶을 때 유용하다.

SELECT CURRENT_DATE FROM DUAL;

-- 현재 날짜를 기준으로 오늘 입사한 직원 찾기
SELECT employee_id, last_name, hire_date
FROM employees
WHERE hire_date = CURRENT_DATE;

활용 예시:

  • 해외 지사와 본사를 동시에 관리하는 시스템에서, 지역별 로컬 기준 날짜로 데이터 비교.
  • 출석 시스템이나 당일 접속 로그 확인.

 

3. ADD_MONTHS – 개월 수 더하기

ADD_MONTHS는 특정 날짜에 개월 수를 더하거나 빼는 함수다.
주로 계약 만료일, 시험 유효기간, 프로모션 종료일 계산할 때 자주 사용된다.

-- 오늘로부터 3개월 뒤 날짜 구하기
SELECT ADD_MONTHS(SYSDATE, 3) AS three_months_later
FROM DUAL;

-- 직원 입사일로부터 6개월 뒤 날짜 계산
SELECT employee_id, last_name, hire_date, 
       ADD_MONTHS(hire_date, 6) AS six_month_date
FROM employees
WHERE ROWNUM <= 5;

활용 예시:

  • 입사 6개월 후 평가일을 자동으로 구하기.
  • 유효기간 관리 (예: 카드 발급일 + 36개월 → 만료일).

 

4. MONTHS_BETWEEN – 두 날짜 차이 (개월 수)

MONTHS_BETWEEN은 두 날짜 간의 개월 수를 계산한다. 소수점 단위까지 나와서 더 정확하다.

-- 특정 날짜와 오늘의 차이를 개월 수로 구하기
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2024-01-01', 'YYYY-MM-DD')) AS months_since_new_year
FROM DUAL;

-- 직원 근속 개월 수 구하기
SELECT employee_id, last_name, hire_date, 
       ROUND(MONTHS_BETWEEN(SYSDATE, hire_date), 2) AS months_worked
FROM employees
WHERE ROWNUM <= 5;

활용 예시:

  • 직원 근속 연한 계산 (개월 단위).
  • 고객 계약 기간이 얼마나 지났는지 체크.

 

5. 날짜 범위 검색 (BETWEEN 활용)

날짜 함수만 아는 게 아니라, 날짜를 조건으로 필터링하는 것도 중요하다.

-- 2005년에 입사한 직원 목록
SELECT employee_id, last_name, hire_date
FROM employees
WHERE hire_date BETWEEN TO_DATE('2005-01-01', 'YYYY-MM-DD') 
                    AND TO_DATE('2005-12-31', 'YYYY-MM-DD')
ORDER BY hire_date;

-- 최근 1년 이내 입사한 직원
SELECT employee_id, last_name, hire_date
FROM employees
WHERE hire_date >= ADD_MONTHS(SYSDATE, -12)
ORDER BY hire_date;

활용 예시:

  • “2005년에 입사한 직원들만 보고 싶다.”
  • “최근 1년 내 입사자 리스트를 뽑아보자.”

 

'DBMS > 개념' 카테고리의 다른 글

11_ 제약 조건  (0) 2025.09.29
10_ 설계의 3단계  (0) 2025.09.27
08_ DBMS 형변환  (0) 2025.09.23
07_ DML의 심화  (0) 2025.09.21
06_ DB의 연산자  (0) 2025.09.19