
근무일수를 구하려고 DATE_SUB을 썼다...
-- ❌ 틀림!
DATE_SUB('2026-02-01', hire_date) AS work_days
DATE_SUB은 일수 계산이 아니다!
| 함수 | 역할 | 결과 |
|---|---|---|
| DATEDIFF | 며칠 차이? | 숫자 |
| DATE_ADD | N일 후 날짜? | 날짜 |
| DATE_SUB | N일 전 날짜? | 날짜 |
DATEDIFF(끝날짜, 시작날짜)
DATEDIFF('2026-02-01', '2020-03-01') → 2163 (숫자!)
DATEDIFF('2024-03-15', '2024-01-01') → 74
큰 날짜가 먼저! (끝 - 시작)
SELECT
name,
DATEDIFF('2026-02-01', hire_date) AS work_days
FROM employees
DATE_ADD(날짜, INTERVAL N 단위)
DATE_ADD('2024-06-01', INTERVAL 30 DAY) → '2024-07-01'
DATE_ADD('2024-06-01', INTERVAL 3 MONTH) → '2024-09-01'
DATE_ADD('2024-06-01', INTERVAL 1 YEAR) → '2025-06-01'
SELECT
user_name,
DATE_ADD(issued_date, INTERVAL 30 DAY) AS expire_date
FROM coupons
DATE_SUB(날짜, INTERVAL N 단위)
DATE_SUB('2026-02-01', INTERVAL 30 DAY) → '2026-01-02'
DATE_SUB('2026-02-01', INTERVAL 3 MONTH) → '2025-11-01'
-- "며칠 차이?" → DATEDIFF (숫자!)
DATEDIFF('2026-02-01', '2020-03-01') → 2163
-- "30일 전 날짜?" → DATE_SUB (날짜!)
DATE_SUB('2026-02-01', INTERVAL 30 DAY) → '2026-01-02'
| 함수 | 인자 | 결과 |
|---|---|---|
| DATEDIFF(끝, 시작) | 날짜 2개 | 숫자 |
| DATE_SUB(날짜, INTERVAL N DAY) | 날짜 + 숫자 | 날짜 |
DATE_SUB에 날짜 2개 못 넣어! INTERVAL 형태로만!
| 단위 | 의미 |
|---|---|
| DAY | 일 |
| MONTH | 월 |
| YEAR | 년 |
| HOUR | 시간 |
윤년, 월별 일수 다 SQL이 알아서 처리! 😎
| 하고 싶은 것 | 함수 |
|---|---|
| 며칠 차이? | DATEDIFF(끝, 시작) → 숫자 |
| N일 후 날짜? | DATE_ADD(날짜, INTERVAL N DAY) → 날짜 |
| N일 전 날짜? | DATE_SUB(날짜, INTERVAL N DAY) → 날짜 |
날짜 = DATEDIFF(숫자) vs DATE_ADD/SUB(날짜)! 💪