| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- inner join
- 금융IT
- MAX
- order by
- IELTS
- 도서추천
- where
- 해외결제
- having
- alias
- 금융 플랫폼
- programmers
- SQL
- Python
- IS NOT NULL
- 투자자산운용사
- ifnull
- MySQL
- SubQuery
- 트래블테크
- is null
- LIMIT
- date_format
- 날짜 포맷
- 서브쿼리
- count
- GROUP BY
- join
- IN
- Round
- Today
- Total
Every Step Matters
[프로그래머스 SQL Lv.1] 조건에 맞는 도서 리스트 출력하기 (MySQL), DATE_FORMAT 함수 이용해서 날짜 조회 형식 맞추기 본문
[프로그래머스 SQL Lv.1] 조건에 맞는 도서 리스트 출력하기 (MySQL), DATE_FORMAT 함수 이용해서 날짜 조회 형식 맞추기
imnyoung 2025. 11. 25. 23:08문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/144853
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 테이블 : BOOK
| Column name | Type | Nullable | Description |
| BOOK_ID | INTEGER | FALSE | 도서 ID |
| CATEGORY | VARCHAR(N) | FALSE | 카테고리 (경제, 인문, 소설, 생활, 기술) |
| AUTHOR_ID | INTEGER | FALSE | 저자 ID |
| PRICE | INTEGER | FALSE | 판매가 (원) |
| PUBLISHED_DATE | DATE | FALSE | 출판일 |
2. 문제
BOOK 테이블에서 (1) 2021년에 출판된 (2) '인문' 카테고리에 속하는 도서 리스트를 찾아서 (3) 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요. 결과는 (4) 출판일을 기준으로 오름차순 정렬해주세요.
*주의: PUBLISHED_DATE의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.
| BOOK_ID | PUBLISHED_DATE |
| 4 | 2021-03-15 |
| 3 | 2021-04-11 |
3. 문제풀이
1) published_date 타입 탐색
가장 먼저 든 의문은 published_date와 관련된 의문이었다. 아래와 같은 쿼리 결과를 보니 published_date에 시간까지 같이 나온 것이었다. 분명 문제에서 published_date의 타입이 datetime이 아니라 date라고 명시해뒀기 때문에, 여기서 한번 궁금증이 생겼다.
SELECT book_id, published_date
FROM book
WHERE year(published_date) = 2021
AND category = "인문"
ORDER BY published_date

그래서 문제가 틀린건가? 라는 생각에 실제로 DB에 저장되어 있는 데이터 타입을 확인해 보았다.
DESC book; -- 테이블 구조 확인
DESC 또는 DESCRIBE 모두 가능. 테이블의 칼럼 명과, NULL 조건 여부, 데이터 타입을 알아 볼 수 있는 명령어이다.

그 결과 published_date는 date로 잘 저장되어 있었다.
찾아보니 특정 데이터베이스 툴이 날짜/시간 유형의 데이터를 처리할 때 일관성을 위해 전체 타임스탬프 형식을 고수하도록 설계되어 있다면 시간 정보를 00:00:00 으로 표시한다고 한다.
2) published_date 조회 시 형식 맞추기
그렇다면 published_date 조회 시 시간 정보 없이 날짜만 출력되도록 하기 위해서는 어떻게 해야 할까?
바로 DATE_FORMAT(날짜, '포맷') 함수를 이용하면 된다! 아래 표는 포맷 종류이고, 볼드체는 자주 쓰이는 종류이다.
| 포멧문자 | 설명 |
| %Y | 년도 (2023) |
| %y | 년도(23) |
| %d | 일(01,19) |
| %e | 일(1,19) |
| %T | 시간(12:30:00) |
| %r | 시간(12:30:00 AM) |
| %H | 24시간 시간(01, 14, 18) |
| %h, %l | 12시간 시간(01,02,06) |
| %m | 월(01,02,11) |
| %c | 월(1,8) |
| %M | 월(January, August) |
| %b | 월(Jan,Aug) |
| %W | 요일(Wednesday, Sunday) |
| %i | 분(00) |
| %S, %s | 초(00) |
원래 MySQL에서는 DATE(published_date)로도 날짜만 출력되도록 설정할 수 있는데, 프로그래머스에서는 틀린 답으로 나온다고 한다... (해당 문제 질문하기 글 참고)
4. 정답
따라서 정답은
SELECT book_id, DATE_FORMAT(book.published_date, '%Y-%m-%d') as "published_date" -- 별칭 지정해주기
FROM book
WHERE year(published_date) = 2021 -- 2021년에 출판된('2021'도 가능)
AND category = "인문" -- '인문' 카테고리에 속하는
ORDER BY published_date -- 출판일을 기준으로 오름차순 정렬
'2021'도 가능한 이유: MySQL은 비교할 때 문자열 '2021'을 숫자 2021로 자동 형 변환해서 비교하기 때문. 하지만 숫자 비교가 더 좋다!
Reference
https://velog.io/@gloz0315/SQL-%EB%82%A0%EC%A7%9C-%ED%98%95%EC%8B%9D-%EB%B3%80%EA%B2%BD
https://dalcheonroadhead.tistory.com/657
https://easyitwanner.tistory.com/276 (날짜와 시간 데이터 유형과 예시 정리)
https://www.blog.data101.io/50 (날짜/시간 표기방식 지정하기)
'Database > SQL' 카테고리의 다른 글
| [프로그래머스 SQL Lv.1] 흉부외과 또는 일반외과 의사 목록 출력하기 (MySQL) (0) | 2025.11.25 |
|---|---|
| [프로그래머스 SQL Lv.1] 12세 이하인 여자 환자 목록 출력하기 (MySQL) (0) | 2025.11.25 |
| [프로그래머스 SQL Lv.1] Python 개발자 찾기 (MySQL) (0) | 2025.11.25 |
| [프로그래머스 SQL Lv.1] 모든 레코드 조회하기 (MySQL) (0) | 2025.11.25 |
| [프로그래머스 SQL Lv.1] 인기있는 아이스크림 (MySQL) (0) | 2025.11.24 |