SQL 근무 기간 계산 - DATEDIFF() 날짜 함수

습토리·2025년 2월 15일

SQL

목록 보기
7/12

1. 문제 개요

의사 테이블에서 근무 기간을 계산하여 일수년, 월, 일 형식으로 출력하는 SQL 쿼리를 작성해 보겠습니다. 🎯


2. SQL의 다양한 버전과 선택 고민

SQL다양한 데이터베이스 관리 시스템(DBMS)에서 사용됩니다.
하지만 초보자에게 추천하는 SQL 버전MySQL입니다. 🐬

  • MySQL가장 널리 사용되는 오픈소스 DBMS로,
  • 학습 자료도 풍부하고 설치 및 사용이 간편합니다.
  • MySQL로 SQL을 익히면 PostgreSQL, SQL Server 등 다른 DBMS로의 전환도 쉽게 가능합니다. 💡

⚠️ DBMS별 날짜 계산 함수 차이:

  • MySQL: CURDATE(), DATEDIFF()
  • PostgreSQL: CURRENT_DATE, AGE()
  • SQL Server: GETDATE(), DATEDIFF()

📌 이 글에서는 MySQL 기준으로 설명합니다! 🐬


3. 근무 기간을 일 단위로 계산하기

올바른 MySQL 쿼리:

SELECT *,
       DATEDIFF(CURDATE(), hire_date) AS 'hired_period_in_days'
FROM doctors;

📝 결과 예시:

idnamemajorhire_datehired_period_in_days
1르탄이피부과2018-05-102107
2배캠이성형외과2019-06-151706
3구구이안과2020-07-201311

📌 쿼리 설명:

  • CURDATE(): 현재 날짜를 반환합니다. (예: 2024-02-15)
  • DATEDIFF(CURDATE(), hire_date): 현재 날짜와 고용일(hire_date) 간의 일 수를 계산합니다.
  • AS 'hired_period_in_days': 결과 컬럼의 이름을 지정합니다. 🎯

🚨 주의사항:

  • MySQL에서는 날짜 연산이 매우 직관적으로, DATEDIFF()를 사용하면 일 수를 바로 계산할 수 있습니다.
  • SQL Server에서는 DATEDIFF(day, hire_date, GETDATE())를 사용합니다.

4. 근무 기간을 년, 월, 일 단위로 출력하기

MySQL 쿼리:

SELECT name, hire_date,
       FLOOR(DATEDIFF(CURDATE(), hire_date) / 365) AS years,
       FLOOR((DATEDIFF(CURDATE(), hire_date) % 365) / 30) AS months,
       (DATEDIFF(CURDATE(), hire_date) % 365) % 30 AS days
FROM doctors;

📝 결과 예시:

namehire_dateyearsmonthsdays
르탄이2018-05-10595
배캠이2019-06-15480
구구이2020-07-203626

📌 쿼리 설명:

  • 1년 = 365일, 1개월 = 30일로 단순 계산하여 근무 기간을 년, 월, 일 형식으로 출력합니다.
  • FLOOR() 함수를 사용해 소수점을 버립니다.
  • 연산 과정:
    • DATEDIFF(CURDATE(), hire_date) / 365: 근무 연수
    • (DATEDIFF(CURDATE(), hire_date) % 365) / 30: 근무 개월 수
    • (DATEDIFF(CURDATE(), hire_date) % 365) % 30: 근무 일 수

🔍 TIP:

  • 정확한 날짜 계산은 MySQL TIMESTAMPDIFF() 함수를 사용할 수도 있습니다.
  • 하지만 SQL 학습 단계에서는 DATEDIFF()FLOOR()의 동작 원리를 이해하는 것이 더 중요합니다. 😊

5. 마무리 🎯

이번 글에서는 SQL에서 날짜를 다루는 방법을 다뤘습니다.

  • MySQL을 기준으로 DATEDIFF() 함수를 통해 일 수 계산을 했고,
  • 근무 기간을 년, 월, 일 형식으로 변환하는 수식도 함께 다뤘습니다.
  • DBMS마다 현재 날짜 함수(CURDATE(), GETDATE(), CURRENT_DATE)가 다르다는 점도 살펴봤습니다.

✅ 오늘 배운 핵심 포인트:

  • 📆 DATEDIFF(): 두 날짜 간의 일 수 계산
  • 🗓️ CURDATE(): 현재 날짜를 가져오는 함수(MySQL 기준)
  • 🧠 FLOOR(): 소수점을 버리는 함수
profile
재미난 삶을 살다

0개의 댓글