티스토리 뷰

 

📌 SQL 날짜, 시간 차이

DATEDIFF와 TIMESTAMPDIFF 함수는 SQL에서 날짜와 시간 간격을 계산하는 데 사용되는 함수입니다.

 

 

 

📌 기본 문법

 

1. DATEDIFF 문법

    • MySQL/MSSQL: 두 날짜 사이의 일(day) 단위 차이를 반환합니다.
    • Oracle: Oracle에서는 DATEDIFF 함수가 없지만, 날짜를 빼는 방식으로 동일한 결과를 얻을 수 있습니다.
-- MySQL/MSSQL 문법
DATEDIFF(date_expr1, date_expr2)

-- Oracle 대체 문법
date_expr1 - date_expr2
 

 

2. TIMESTAMPDIFF 문법 (MySQL 전용)

    • 주어진 두 날짜 사이의 특정 단위 간격(년, 월, 일, 시, 분, 초 등)을 반환합니다.
-- MySQL 문법
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
 
    • unit: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 등.

 

 

 

 

📌 포맷 문자 종류 및 설명

 

1. DATEDIFF는 포맷 문자를 사용하지 않습니다.

    • 두 날짜 간의 차이를 단순히 일(day) 단위로 계산합니다.

 

2. TIMESTAMPDIFF에서는 단위별 포맷을 지정합니다:

    • YEAR: 연도 차이
    • MONTH: 월 차이
    • DAY: 일 차이
    • HOUR: 시간 차이
    • MINUTE: 분 차이
    • SECOND: 초 차이

 

 

📌 예제

 

  • MySQL에서 DATEDIFF 예제
-- 두 날짜 간의 차이를 일 단위로 계산
SELECT DATEDIFF('2024-09-19', '2024-01-01') AS days_diff;
 
    • 결과: 262

 

 

  • MySQL에서 TIMESTAMPDIFF 예제
-- 두 날짜 간의 차이를 월 단위로 계산
SELECT DATEDIFF(MONTH, '2023-01-01', '2024-09-19') AS months_diff;
 
    • 결과: 26

 

 

  • MSSQL에서 DATEDIFF 예제
-- 두 날짜 간의 차이를 월 단위로 계산
SELECT DATEDIFF(MONTH, '2023-01-01', '2024-09-19') AS months_diff;
 
    • 결과: 20

 

 

  • Oracle에서 DATEDIFF 대체 방법
-- 두 날짜 간의 차이를 일 단위로 계산
SELECT TO_DATE('2024-09-19', 'YYYY-MM-DD') - TO_DATE('2024-01-01', 'YYYY-MM-DD') AS days_diff
FROM dual;
 
    • 결과: 262

 

 

 

GOOD 사용법

  • 경력 계산: 직원의 입사일과 현재 날짜 사이의 차이를 계산하는 데 사용합니다.
SELECT 
    employee_name,
    DATEDIFF(NOW(), hire_date) AS days_worked
FROM employees;
 
  • 이벤트 간격 계산: 두 이벤트 사이의 시간을 측정할 수 있습니다.
SELECT 
    event_name,
    TIMESTAMPDIFF(HOUR, start_time, end_time) AS event_duration_hours
FROM events;
 
  • 유효 기간 계산: 유효기간이나 만료일을 계산할 때 유용합니다.
SELECT 
    product_name,
    DATEDIFF(expiry_date, NOW()) AS days_until_expiry
FROM products;
 

 

 

BAD 사용법

  • 잘못된 단위 사용: DATEDIFF는 일 단위로만 차이를 반환하므로 시간이나 분, 초 단위로 차이를 알고 싶을 때는 TIMESTAMPDIFF 또는 다른 방법을 사용해야 합니다.
SELECT DATEDIFF('2024-09-19 14:00:00', '2024-09-19 12:00:00');
 
    • 문제점: 결과는 0이 됩니다. DATEDIFF는 날짜만 비교하며 시간은 무시됩니다.

 

 

  • 부정확한 비교: 시간대(time zone)가 다를 경우 두 날짜를 비교할 때 잘못된 값을 반환할 수 있습니다.
SELECT TIMESTAMPDIFF(HOUR, '2024-09-19 12:00:00+00:00', '2024-09-19 14:00:00+02:00') 
AS hours_diff;
 
  • 문제점: 시간대 차이를 고려하지 않으면 잘못된 차이가 계산됩니다.

 

 

 

 

반응형