데이터베이스를 다루다 보면 날짜와 시간 처리가 생각보다 자주 필요하다.
"이번 달 입사한 직원은 누구지?", "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 |