본문 바로가기
프로그래밍/MySQL

📊 [SQL 프로젝트] 제14장 날짜 함수(Date Functions) - 날짜와 시간을 자유롭게 다루기

by 강릉바다의 블로그 2026. 6. 30.

제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)

연습 문제

기본 문제

  1. CURDATE()와 NOW()의 차이를 설명해 보세요.
  2. YEAR() 함수는 무엇을 반환하나요?
  3. MONTH()와 DAY()는 각각 무엇을 반환하나요?

응용 문제

  1. Orders 테이블에서 주문 연도만 조회하는 SQL을 작성해 보세요.
  2. Orders 테이블에서 주문 월만 조회하는 SQL을 작성해 보세요.
  3. 오늘 날짜를 출력하는 SQL을 작성해 보세요.

도전 문제

Orders 테이블에서

  • OrderID
  • OrderDate
  • YEAR(OrderDate)
  • MONTH(OrderDate)
  • DAY(OrderDate)

를 함께 조회하는 SQL을 작성해 보세요.


다음 장 예고

이번 장에서는 날짜와 시간을 다루는 다양한 날짜 함수를 배웠습니다.

하지만 지금까지 배운 함수들은 모두 한 행(Row)의 데이터만 처리했습니다.

실무에서는 다음과 같은 질문을 더 자주 받습니다.

"상품은 모두 몇 개입니까?"

"평균 가격은 얼마입니까?"

"가장 비싼 상품은 무엇입니까?"

 

이처럼 여러 행의 데이터를 한 번에 계산하는 함수집계 함수(Aggregate Functions)라고 합니다.

다음 장에서는 COUNT(), SUM(), AVG(), MIN(), MAX()를 배우며 SQL이 보고서를 만드는 데 왜 강력한 도구인지 경험하게 될 것입니다.