📊 [SQL 프로젝트] 제14장 날짜 함수(Date Functions) - 날짜와 시간을 자유롭게 다루기
제14장 날짜 함수(Date Functions) - 날짜와 시간을 자유롭게 다루기
오늘의 질문
주문 내역을 확인하던 중 팀장님이 말했습니다.
"올해 주문한 내역만 보여 주세요."
잠시 후 회계팀에서 또 요청합니다.
"주문한 연도와 월만 따로 표시하면 보고서 만들기 편하겠습니다."
그리고 개발팀에서는 이렇게 말합니다.
"오늘 날짜를 자동으로 입력하면 좋겠습니다."
날짜는 단순한 숫자가 아닙니다.
연도, 월, 일, 시간 등 다양한 정보를 가지고 있습니다.
이처럼 날짜와 시간을 쉽게 다루는 기능을 날짜 함수(Date Functions)라고 합니다.
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- 날짜 함수의 역할을 설명할 수 있다.
- CURDATE()와 NOW()의 차이를 이해할 수 있다.
- YEAR(), MONTH(), DAY()를 사용할 수 있다.
- 날짜 함수를 실무에서 활용할 수 있다.
14-1. 날짜 함수란 무엇일까요?
생각해 봅시다.
문자열 함수는
글자를 가공했습니다.
숫자 함수는
숫자를 계산했습니다.
날짜 함수는
날짜와 시간을 원하는 형태로 추출하거나 계산합니다.
예를 들어
1996-07-15
라는 날짜에서
- 연도 : 1996
- 월 : 7
- 일 : 15
를 각각 꺼낼 수 있습니다.
🤔 왜 날짜 함수가 필요할까요?
회사에서는
"몇 년도인가?"
"몇 월인가?"
"오늘 날짜는?"
과 같은 질문을 매우 자주 합니다.
보고서도 대부분
- 연도별
- 월별
- 분기별
로 작성됩니다.
그래서 날짜 함수는 가장 많이 사용하는 함수 가운데 하나입니다.
14-2. CURDATE() - 오늘 날짜
다음 SQL을 실행해 보세요.
SELECT CURDATE();
실행 결과(예)
2026-06-30
오늘 날짜를 반환합니다.
시간은 포함되지 않습니다.
14-3. NOW() - 현재 날짜와 시간
SELECT NOW();
실행 결과(예)
2026-06-30 14:35:18
현재 날짜와 시간을 모두 반환합니다.
잠깐 생각해 보기
두 함수의 차이는 무엇일까요?
| 함수 | 반환값 |
| CURDATE() | 날짜 |
| NOW() | 날짜 + 시간 |
14-4. YEAR()
SELECT OrderDate,
YEAR(OrderDate)
FROM Orders;
결과
| OrderDate | YEAR(OrderDate) |
| 1996-07-04 | 1996 |
연도만 추출합니다.
14-5. MONTH()
SELECT OrderDate,
MONTH(OrderDate)
FROM Orders;
결과
| OrderDate | MONTH(OrderDate) |
| 1996-07-04 | 7 |
월만 추출합니다.
14-6. DAY()
SELECT OrderDate,
DAY(OrderDate)
FROM Orders;
결과
| OrderDate | DAY(OrderDate) |
| 1996-07-04 | 4 |
일만 추출합니다.
🤔 함수를 함께 사용할 수도 있습니다.
예를 들어
SELECT YEAR(OrderDate),
MONTH(OrderDate)
FROM Orders;
처럼
여러 함수를 동시에 사용할 수도 있습니다.
💡 잠깐! 이것도 알아두세요
날짜 함수는
원래 날짜를 변경하지 않습니다.
조회 결과만 변경합니다.
자주 하는 실수
① CURDATE()와 NOW()를 같은 함수라고 생각한다.
CURDATE()
↓
날짜만
NOW()
↓
날짜와 시간
② YEAR 대신 문자열 함수를 사용한다.
연도를 추출할 때는
YEAR()를 사용하는 것이 가장 좋습니다.
③ 함수 뒤 괄호를 생략한다.
잘못된 예
YEAR OrderDate
올바른 예
YEAR(OrderDate)
④ 날짜를 문자처럼 생각한다.
날짜는 문자열처럼 보이지만
DB에서는 날짜 자료형으로 저장되는 경우가 많습니다.
그래서 날짜 함수를 사용하는 것이 좋습니다.
실무에서는 어떻게 사용할까요?
회사에서는 날짜 함수를 이용하여
- 월별 매출
- 연도별 주문
- 오늘 주문 조회
- 생일 관리
- 계약 기간 관리
등을 처리합니다.
실습
실습 1
오늘 날짜를 출력하세요.
SELECT CURDATE();
실습 2
현재 날짜와 시간을 출력하세요.
SELECT NOW();
실습 3
Orders 테이블에서 주문 연도와 월을 출력하세요.
SELECT YEAR(OrderDate),
MONTH(OrderDate)
FROM Orders;
실무 미션
당신은 영업관리팀 직원입니다.
월별 주문 통계를 만들기 위해
다음 항목을 출력하려고 합니다.
- 주문번호(OrderID)
- 주문일(OrderDate)
- 주문 연도
- 주문 월
SQL을 작성해 보세요.
핵심 정리
✔ 날짜 함수는 날짜와 시간을 가공한다.
✔ CURDATE()는 오늘 날짜를 반환한다.
✔ NOW()는 현재 날짜와 시간을 반환한다.
✔ YEAR(), MONTH(), DAY()는 날짜의 일부를 추출한다.
✔ 여러 날짜 함수를 함께 사용할 수 있다.
"함수는 누구를 대상으로 계산할까?"
| 함수 종류 | 계산 대상 | 예시 |
| 문자열 함수 | 한 행의 문자열 | UPPER(CustomerName) |
| 숫자 함수 | 한 행의 숫자 | ROUND(Price, 1) |
| 날짜 함수 | 한 행의 날짜 | YEAR(OrderDate) |
| 집계 함수 | 여러 행 전체 | AVG(Price) |
연습 문제
기본 문제
- CURDATE()와 NOW()의 차이를 설명해 보세요.
- YEAR() 함수는 무엇을 반환하나요?
- MONTH()와 DAY()는 각각 무엇을 반환하나요?
응용 문제
- Orders 테이블에서 주문 연도만 조회하는 SQL을 작성해 보세요.
- Orders 테이블에서 주문 월만 조회하는 SQL을 작성해 보세요.
- 오늘 날짜를 출력하는 SQL을 작성해 보세요.
도전 문제
Orders 테이블에서
- OrderID
- OrderDate
- YEAR(OrderDate)
- MONTH(OrderDate)
- DAY(OrderDate)
를 함께 조회하는 SQL을 작성해 보세요.
다음 장 예고
이번 장에서는 날짜와 시간을 다루는 다양한 날짜 함수를 배웠습니다.
하지만 지금까지 배운 함수들은 모두 한 행(Row)의 데이터만 처리했습니다.
실무에서는 다음과 같은 질문을 더 자주 받습니다.
"상품은 모두 몇 개입니까?"
"평균 가격은 얼마입니까?"
"가장 비싼 상품은 무엇입니까?"
이처럼 여러 행의 데이터를 한 번에 계산하는 함수를 집계 함수(Aggregate Functions)라고 합니다.
다음 장에서는 COUNT(), SUM(), AVG(), MIN(), MAX()를 배우며 SQL이 보고서를 만드는 데 왜 강력한 도구인지 경험하게 될 것입니다.