[MySQL] DATE_FORMAT : 날짜형식설정

lazy_h·2025년 12월 15일

MySQL 다루기

목록 보기
7/18
post-thumbnail

(※개인 공부 목적의 게시물입니다.)


프로그래머스 > sql > select > 조건에 부합하는 중고거래 댓글 조회하기

문제 바로가기


<문제 설명>

다음은 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고거래 게시판 첨부파일 정보를 담은 USED_GOODS_REPLY 테이블입니다.

USED_GOODS_BOARD테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은 게시글ID, 작성자ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.

Column nameTypeNullable
BOARD_IDVARCHAR(5)FALSE
WRITER_IDVARCHAR(50)FALSE
TITLEVARCHAR(100)FALSE
CONTENTSVARCHAR(1000)FALSE
PRICENUMBERFALSE
CREATED_DATEDATEFALSE
STATUSVARCHAR(10)FALSE
VIEWSNUMBERFALSE

USED_GOODS_REPLY 테이블은 다음과 같으며 REPLY_ID, BOARD_ID, WRITER_ID, CONTENTS, CREATED_DATE는 각각 댓글ID, 게시글ID, 작성자ID, 댓글내용, 작성일을 의미합니다.

Column nameTypeNullable
REPLY_IDVARCHAR(10)FALSE
BOARD_IDVARCHAR(5)FALSE
WRITER_IDVARCHAR(50)FALSE
CONTENTSVARCHAR(1000)TRUE
CREATED_DATEDATEFALSE

<문제>

USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요.

결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.


<풀이 코드>

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 AS B JOIN USED_GOODS_REPLY AS R
	ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY CREATED_DATE, B.TITLE;

<설명>

  • DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
    • CREATED_DATE 컬럼의 날짜 형식이 '2022-10-01 00:00:00' 이러한 형식이기 때문에 '2022-10-01' 형식으로 맞추기 위해서 DATE_FORMAT 함수 사용이 필요함

[DATE_FORMAT()]

1. 기본 형식

DATE_FORMAT(날짜타입 컬럼, '원하는 날짜형식')

2. 구분기호

구분기호의미
%Y연도 4자리
%y연도 2자리
%M월 풀네임(영문)
%m월 두자리(01~12)
%D일 + 영어서수(1st, 2nd, 3rd...)
%d일 두자리(01~31)
%b짧은 월(Jan, Dec...)
%W요일이름 풀네임(영문)
%a짧은 요일이름(Sun, Sat..)
%i분(00~59)
%Thh:mm:SS(24시간 표기법)
%c월(1~12) ->한자리는 한자리로 작성
%e일(1~31) -> 한자리는 한자리로 작성
%I시간(00~12)
%H시간(00~23)
%h시간(00~12)
%rhh:mm:ss AM/PM
%S초(00~59)
%j1년 기준 일수(001~366)
%pPM, AM 표시

3. 예시

(D를 날짜타입의 컬럼이라고 가정)

DATE_FORMAT(D, '%Y-%m-%d')

-> 2025-12-15

DATE_FORMAT(D, '%Y %M %d')

-> 2025 December 15

DATE_FORMAT(D, '%Y.%m.%d %r')

-> 2025.12.15 08:47:30 PM

DATE_FORMAT(D, '%Y년%m월%d일%H시%i분%S초')

-> 2025년12월15일20시47분30초


  • FROM USED_GOODS_BOARD AS B JOIN USED_GOODS_REPLY AS R
    	ON B.BOARD_ID = R.BOARD_ID
    • USED_GOODS_BOARD와 USED_GOODS_REPLY 두 테이블에서 추출해야하므로 BOARD_ID를 기준으로 JOIN 해줌
  • WHERE B.CREATED_DATE LIKE '2022-10%'
    • 2022년 10월에 작성한 것을 추출하므로 '2022-10' 으로 시작하는 문자열을 검색
  • ORDER BY CREATED_DATE, B.TITLE
    • SELECT에서 지정한 CREATED_DATE 별명 ORDER BY절에서 사용가능

profile
fun coding

0개의 댓글