티스토리 뷰
📌 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;
- 문제점: 시간대 차이를 고려하지 않으면 잘못된 차이가 계산됩니다.
반응형