728x90
반응형
코딩테스트 연습 > String, Date > 조건별로 분류하여 주문상태 출력하기
난이도: Lv.3
언어: MySQL
https://school.programmers.co.kr/learn/courses/30/lessons/131113
실패
SELECT
a.ORDER_ID
, a.PRODUCT_ID
, DATE_FORMAT(a.OUT_DATE, '%Y-%m-%d') AS OUT_DATE
, CASE OUT_DATE
WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
WHEN OUT_DATE > '2022-05-01' THEN '출고대기'
ELSE '출고미정'
END AS '출고여부'
FROM FOOD_ORDER a
ORDER BY ORDER_ID
실패이유1. 문자열로 날짜를 비교했음.
DATEDIFF로 날짜의 차이를 구해서 비교해야합니다.
실패이유2. CASE WHEN 절을 잘 못 사용함.
CASE WHEN 절은
CASE WHEN ~
THEN ~
(ELSE ~)
END AS ~
로 이루어지는데, CASE 와 WHEN 사이에 변수명을 넣어서 MySQL 문법에 어긋나고 있습니다.
성공
성공1. *채택
SELECT
a.ORDER_ID
, a.PRODUCT_ID
, DATE_FORMAT(a.OUT_DATE, '%Y-%m-%d') AS OUT_DATE
, CASE
WHEN DATEDIFF(OUT_DATE, '2022-05-01') <= 0 THEN '출고완료'
WHEN DATEDIFF(OUT_DATE, '2022-05-01') > 0 THEN '출고대기'
ELSE '출고미정'
END AS '출고여부'
FROM FOOD_ORDER a
ORDER BY ORDER_ID
날짜를 비교하는데는 DATEDIFF와 TIMESTAMPDIFF가 있는데, 여기서는 날짜만 비교할 것이기 때문에 DATEDIFF를 채용했습니다.
성공2.
SELECT
a.ORDER_ID
, a.PRODUCT_ID
, DATE_FORMAT(a.OUT_DATE, '%Y-%m-%d') AS OUT_DATE
, CASE
WHEN TIMESTAMPDIFF(DAY, OUT_DATE, '2022-05-01') >= 0 THEN '출고완료'
WHEN TIMESTAMPDIFF(DAY, OUT_DATE, '2022-05-01') < 0 THEN '출고대기'
ELSE '출고미정'
END AS '출고여부'
FROM FOOD_ORDER a
ORDER BY ORDER_ID
성공1에서 DATEDIFF만 TIMSTAMPDIFF로 변경해보았습니다.
*참고 chatGPT
없습니다.
코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다.
봐주셔서 감사합니다.
728x90
반응형
'Study > SQL' 카테고리의 다른 글
[프로그래머스 SQL] 대여 기록이 존재하는 자동차 리스트 구하기 (1) | 2024.01.16 |
---|---|
[프로그래머스 SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2024.01.16 |
[프로그래머스 SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.01.15 |
[프로그래머스 SQL] 헤비 유저가 소유한 장소 (0) | 2024.01.15 |
[프로그래머스 SQL] 있었는데요 없었습니다 (0) | 2024.01.15 |