TobeSteady

[SELECT] DATE_FORMAT / to_char 본문

Languages/SQL

[SELECT] DATE_FORMAT / to_char

NKUT 2023. 3. 3. 08:26

프로그램머스 : 조건에 맞는 도서 리스트 출력하기

문제

BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 
도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

- 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 출판일

 


MySQL

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE '2021-01-01'<= PUBLISHED_DATE <= '2021-12-31' AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE

- DATE_FORMAT(date, format)

  • date : 포맷을 변경하고 싶은 값 / format : 변경하고 싶은 날짜타입.
지정값 구분 표시형식
%Y / %y 4자리 / 2자리 연도
%m / %c  01-12 / 1-12 
%M / %b January, February.. / Jan, Feb…
%d / %e / %D 일  01-31 / 1-31 /1st, 2nd…

https://www.w3schools.com/sql/func_mysql_date_format.asp

 


 

Oracle

SELECT BOOK_ID,
	to_char(PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK
WHERE to_char(PUBLISHED_DATE, 'yyyy') = '2021' AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE

1️⃣ TO_CHAR : NUMBER ➡️ CHARACTER

select to_char(1234, '99999'), to_char(1234, '00000'), to_char(1234, 'L9999'), to_char(1234, '9,999') from dual;

TO_CHAR(1234 TO_CHAR(1234 TO_CHAR(1234,'L9999')          TO_CHAR(1234
------------ ------------ ------------------------------ ------------
  1234        01234               ₩1234                  1,234

2️⃣  TO_CHAR :  DATE ➡️ CHARACTER

  • sysdate : 시스템 date
select to_char(sysdate, 'HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,
----------------
01:50:47

select to_char(sysdate, 'MON DY, YYYY') from dual;
TO_CHAR(SYSDATE,'MONDY,YYYY')
--------------------------------------
7월  수, 2022

select to_char(sysdate, 'YYYY-FMMM-DD DAY') from dual;
TO_CHAR(SYSDATE,'YYYY-FMMM-DDDAY')
----------------------------------------------
2022-7-27 수요일

select to_char(sysdate, 'YYYY-MM-DD') from dual;
TO_CHAR(SYSDATE,'YYY
--------------------
2022-07-27

select to_char(sysdate, 'YEAR, Q') from dual;
TO_CHAR(SYSDATE,'YEAR,Q')
----------------------------------------------
TWENTY TWENTY-TWO, 3