SQL에서 날짜(DATE, DATETIME, TIMESTAMP) 컬럼을 다룰 때는
등을 처리하는 함수들을 사용함
| 함수명 | 기능 설명 | 반환 타입 | 예시 값 |
|---|---|---|---|
YEAR(date) | 연도 추출 (4자리) | INT | 2023 |
MONTH(date) | 월 추출 (1~12) | INT | 10 |
DAY(date) | 일(day) 추출 (1~31) | INT | 5 |
DAYOFWEEK(date) | 요일 추출 (1 = 일요일 ~ 7 = 토요일) | INT | 5 |
WEEKDAY(date) | 요일 추출 (0 = 월요일 ~ 6 = 일요일) | INT | 3 |
HOUR(datetime) | 시(hour) 추출 (0~23) | INT | 14 |
MINUTE(datetime) | 분(minute) 추출 (0~59) | INT | 30 |
SECOND(datetime) | 초(second) 추출 (0~59) | INT | 45 |
NOW() | 현재 날짜와 시간 반환 | DATETIME | 2024-06-10 15:30:22 |
CURDATE() | 현재 날짜 반환 | DATE | 2024-06-10 |
CURTIME() | 현재 시간 반환 | TIME | 15:30:22 |
DATEDIFF(d1, d2) | 두 날짜의 일 수 차이 계산 (d1 - d2) | INT | 5 |
TIMESTAMPDIFF(...) | 날짜 차이를 특정 단위 기준으로 계산 | INT | 12, 365 등 |
DATE_ADD(...) | 날짜 더하기 | DATE or DATETIME | 2023-11-01 등 |
DATE_SUB(...) | 날짜 빼기 | DATE or DATETIME | 2023-09-21 등 |
DATE_FORMAT(...) | 날짜를 문자열로 포맷팅 | VARCHAR | '2023-10-05', '2023년 10월 5일' 등 |
YEAR(날짜컬럼)
날짜에서 연도(4자리 정수)를 추출함
예: '2023-10-05' → 2023
SELECT YEAR('2023-10-05'); -- 결과: 2023
MONTH(날짜컬럼)
날짜에서 월(1~12)을 추출함
SELECT MONTH('2023-10-05'); -- 결과: 10
DAY(날짜컬럼)
날짜에서 일(day)을 추출함
SELECT DAY('2023-10-05'); -- 결과: 5
DAYOFWEEK(날짜컬럼)
요일을 숫자로 반환함 (1 = 일요일, 7 = 토요일)
SELECT DAYOFWEEK('2023-10-05'); -- 결과: 5 (목요일)
WEEKDAY(날짜컬럼)
요일을 숫자로 반환함 (0 = 월요일, 6 = 일요일)
SELECT WEEKDAY('2023-10-05'); -- 결과: 3 (목요일)
DATE_FORMAT(날짜컬럼, '포맷')
날짜를 원하는 문자열 형식으로 포맷함
SELECT DATE_FORMAT('2023-10-05', '%Y-%m-%d'); -- '2023-10-05'
SELECT DATE_FORMAT(NOW(), '%Y년 %m월 %d일'); -- '2023년 10월 05일'
| 포맷 | 의미 |
|---|---|
| %Y | 연도 (4자리) |
| %y | 연도 (2자리) |
| %m | 월 (2자리) |
| %d | 일 (2자리) |
| %H | 시 (24시제) |
| %i | 분 |
| %s | 초 |
NOW()
현재 날짜와 시간을 반환함
SELECT NOW(); -- 예: 2023-10-05 15:30:22
CURDATE()
현재 날짜만 반환함
SELECT CURDATE(); -- 예: 2023-10-05
CURTIME()
현재 시간만 반환함
SELECT CURTIME(); -- 예: 15:30:22
DATEDIFF(날짜1, 날짜2)
날짜 간의 일 수 차이를 정수로 반환함
SELECT DATEDIFF('2023-10-10', '2023-10-05'); -- 결과: 5
TIMESTAMPDIFF(단위, 날짜1, 날짜2)
날짜 간 차이를 지정한 단위 기준으로 반환함
단위: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
SELECT TIMESTAMPDIFF(DAY, '2023-10-01', '2023-10-05'); -- 4
SELECT TIMESTAMPDIFF(MONTH, '2022-01-01', '2023-01-01'); -- 12
DATE_ADD(날짜, INTERVAL N 단위)
날짜에 지정한 기간을 더함
SELECT DATE_ADD('2023-10-01', INTERVAL 7 DAY); -- '2023-10-08'
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);
DATE_SUB(날짜, INTERVAL N 단위)
날짜에서 지정한 기간을 뺌
SELECT DATE_SUB('2023-10-01', INTERVAL 10 DAY); -- '2023-09-21'
YEAR(joined), MONTH(joined)
특정 연/월에 가입한 사용자 필터링 등 조건에 자주 활용됨
SELECT * FROM user_info
WHERE YEAR(joined) = 2023
AND MONTH(joined) = 10;