포스트

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

https://school.programmers.co.kr/learn/courses/30/lessons/131113

문제

  • 문제 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      SELECT 
          ORDER_ID,
          PRODUCT_ID,
          TO_CHAR(OUT_DATE, 'YYYY-MM-DD') AS "OUT_DATE",
          CASE 
              WHEN OUT_DATE <= TO_DATE(20220501, 'YYYY-MM-DD') THEN '출고완료'
              WHEN OUT_DATE > TO_DATE(20220501, 'YYYY-MM-DD') THEN '출고대기'
              WHEN OUT_DATE IS NULL THEN '출고미정'
          END AS "출고여부"
      FROM FOOD_ORDER
      ORDER BY ORDER_ID;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      SELECT 
          ORDER_ID, 
          PRODUCT_ID, 
          TO_CHAR(OUT_DATE, 'YYYY-MM-DD') AS OUT_DATE,  
          CASE 
              WHEN TO_DATE('2022-05-01', 'YYYY-MM-DD') >= OUT_DATE THEN '출고완료'
              WHEN OUT_DATE > TO_DATE('2022-05-01', 'YYYY-MM-DD') THEN '출고대기'
              ELSE '출고미정'
          END AS "출고여부"
      FROM 
          FOOD_ORDER
      ORDER BY 
          ORDER_ID ASC;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
      WITH SAMPLE AS 
      (
          SELECT 
              ORDER_ID , 
              PRODUCT_ID ,
              OUT_DATE
          FROM 
              FOOD_ORDER
      )
        
      SELECT 
          ORDER_ID , 
          PRODUCT_ID ,
          TO_CHAR(OUT_DATE, 'YYYY-MM-DD') ,
          CASE
              WHEN OUT_DATE <= TO_DATE('2022-05-01', 'YYYY-MM-DD') THEN '출고완료'
              WHEN OUT_DATE IS NULL THEN '출고미정'
              ELSE '출고대기'
          END
      FROM SAMPLE
      ORDER BY ORDER_ID;
    
    • 날짜 데이터를 문자열로 변환하는 TO_CHAR 함수를 사용하는 이유는 날짜 데이터를 원하는 형식으로 표시하기 위한 것이다.
    • 날짜 데이터를 직접 비교할 때 형식에 따라 문제가 발생할 수 있으므로 특정 형식으로 변환하여 비교하는 것이 일반적으로 좋은 방법이다.
    • 예를 들어, 날짜가 ‘2022-05-01’ 형식으로 저장되어 있지만 데이터베이스 시스템이 다른 형식으로 날짜를 저장하는 경우, 직접 비교하면 오류가 발생할 수 있다.


  • 실행 결과

실행 결과 실행 결과

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.