[SQL] MYSQL - DATE_FORMAT
❗ 본 포스팅은 Programmers의 SQL 고득점 Kit의 문제를 활용합니다. 다양한 SQL 문제를 풀어보고 싶다면
Programmers를 방문하세요.
SQL문을 작성하다보면 날짜 형태의 값들을 만날 수 있다.
위의 사진처럼 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타입의 값을 핸들링할때 유용하게 쓰이는 구문이니 기억해두면 좋다.