SQL

[SQL] MYSQL - DATE_FORMAT

DS쟁이 2022. 11. 15. 21:15

❗ 본 포스팅은 Programmers의 SQL 고득점 Kit의 문제를 활용합니다. 다양한 SQL 문제를 풀어보고 싶다면

    Programmers를 방문하세요.

 

 

SQL문을 작성하다보면 날짜 형태의 값들을 만날 수 있다.

Programmers - 조건별로 분류하여 주문상태 출력하기

위의 사진처럼 PRODUCT_ID, IN_DATE, OUT_DATE가 대표적인 예이다.

이런 데이터 타입은 문자열로도 슬라이싱이 가능하다.(SUBSTR로 슬라이싱가능)

 

 

-- Programmers 조건별로 분류하여 주문상태 출력하기
SELECT SUBSTR(IN_DATE,1,4)
FROM FOOD_ORDER;

위 처럼 SQL을 작성하게 되면 '2022'만 쭉 출력되게 될 것이다. 이렇게 문제를 푸는것도 가능하다.

하지만 DATE끼리 비교를 하게 된다면 문자열로 슬라이싱하기가 조금 복잡해질 수 있다. 

** 필자가 그랬네요..

복잡하게 풀지않기위해 DATE_FORMAT을 이용해보자.

 

 

문제가 주어졌는데 5월 1일과 출고일자를 비교해야 문제를 풀 수 있는듯하다.

여기서 DATE_FORMAT을 이용하면 짧고 쉽게 DATE를 비교할 수 있다.

 

DATE_FORMAT은 DATE를 넣고 원하는 FORMAT을 넣어주면 된다.

DATE_FORMAT('2022-05-01','%Y-%m-%d')

'2022-05-01'를 단순 문자열로 풀게 된다면 연도, 월, 일을 나눠서 풀어야 할 것이다.

하지만 DATE_FORMAT을 사용하므로 DATE 타입끼리 비교가 가능해진다.

이것을 활용해서 위의 문제를 풀어보자.

 

SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
       CASE
           WHEN OUT_DATE<=DATE_FORMAT('2022-05-01','%Y-%m-%d')
           THEN '출고완료'
           WHEN OUT_DATE IS NULL 
           THEN '출고미정'
           ELSE '출고대기' END AS 출고여부
FROM FOOD_ORDER ;

CASE문을 사용해서 2020년 5월 1일과 비교해서 2020년 5월 1일보다 먼저 들어왔으면 '출고완료', NULL값이면 '출고미정', 그 외의 값은 '출고대기'라고 값을 정해주면 되겠다.

 

✅ DATE타입의 값을 핸들링할때 유용하게 쓰이는 구문이니 기억해두면 좋다.