문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/164673?language=mysql
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 코드
select
b.title,
b.board_id,
r.reply_id,
r.writer_id,
r.contents,
date_format(r.created_date, '%Y-%m-%d') as created_date
from USED_GOODS_BOARD b
join USED_GOODS_REPLY r
on b.board_id = r.board_id
where b.created_date >= '2022-10-01' and b.created_date < '2022-11-01'
order by r.created_date asc, b.title asc
2. 분석
- 문제에서 join 사용시 어느 테이블의 id 인지 정확히 독해해야한다.
- 어떤 시기를 조건으로 걸어야할 경우 위에처럼 기간을 부등호로 조건을 걸거나 like 연산자를 활용할 수 있다.
(b.created_date like '2022-10%') - 오름차순, 내림차순은 문제 마지막 조건에 있는 경우가 많으므로 주의해야한다.
3. date_format 정리
- date_format(컬럼, 형식)으로 날짜 출력 형식을 지정한다.
| 구분 | 기호 | 설명 | 예시 (2026년 1월 2일 17시 5분 9초) |
| 연도 | %Y | 4자리 연도 (대문자) | 2026 (가장 많이 씀) |
| %y | 2자리 연도 (소문자) | 26 | |
| 월 | %m | 01~12 두 자리 월 (소문자) | 01 (가장 많이 씀) |
| %c | 1~12 한 자리 월 | 1 | |
| %M | 월 이름 (영어) | January | |
| 일 | %d | 01~31 두 자리 일 (소문자) | 02 (가장 많이 씀) |
| 시 | %H | 00~23 24시간제 (대문자) | 17 (가장 많이 씀) |
| %h | 01~12 12시간제 (소문자) | 05 | |
| 분 | %i | 00~59 분 (주의: m이 아님) | 05 |
| 초 | %s | 00~59 초 | 09 |
1. 'YYYY-MM-DD'
DATE_FORMAT(CREATED_DATE, '%Y-%m-%d')
-- 결과: 2026-01-02
2. 'YYYY-MM-DD HH:MM:SS'
DATE_FORMAT(CREATED_DATE, '%Y-%m-%d %H:%i:%s')
-- 결과: 2026-01-02 17:05:09
- 주의: 분(Minute)은 %i이다. (%m을 쓰면 월이 출력됨)
3. 'YYYY년 MM월 DD일' (한글 포맷)
DATE_FORMAT(CREATED_DATE, '%Y년 %m월 %d일')
-- 결과: 2026년 01월 02일
4. 시간 관련 함수
- YEAR(date) : 연도만 반환 (숫자)
- MONTH(date) : 월만 반환 (숫자)
- DAY(date) : 일만 반환 (숫자)
- HOUR(date) : 시간만 반환 (숫자) → "오전 9시에서 18시 사이의 입양 건수" 같은 문제에서 유용
'코딩테스트 > 프로그래머스 SQL' 카테고리의 다른 글
| [프로그래머스 / MySQL] 과일로 만든 아이스크림 고르기 (Lv1 - SELECT) (0) | 2026.01.08 |
|---|---|
| [프로그래머스 / MySQL] 12세 이하인 여자 환자 목록 출력하기 (Lv1 - SELECT, COALESCE) (0) | 2026.01.07 |
| [프로그래머스 / MySQL] 조건에 맞는 도서 리스트 출력하기 (Lv1 - SELECT) (0) | 2026.01.06 |
| [프로그래머스 / MySQL] 인기있는 아이스크림 (Lv1 - SELECT) (0) | 2026.01.05 |
| [프로그래머스 / MySQL] 평균 일일 대여 요금 구하기 (Lv1 - SELECT) (0) | 2026.01.02 |