포스트

조건에 맞는 도서 리스트 출력하기

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

문제

  • 문제 풀이

    1
    2
    3
    4
    5
    
      SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS "PUBLISHED_DATE" 
      FROM BOOK
      WHERE CATEGORY = '인문' 
      AND TO_CHAR(PUBLISHED_DATE, 'YYYY') = '2021' 
      ORDER BY PUBLISHED_DATE ASC;
    
    1
    2
    3
    4
    5
    
      SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS "PUBLISHED_DATE" 
      FROM BOOK
      WHERE CATEGORY = '인문' 
      AND PUBLISHED_DATE BETWEEN TO_DATE('2021-01-01', 'YYYY-MM-DD') AND TO_DATE('2021-12-31', 'YYYY-MM-DD')
      ORDER BY PUBLISHED_DATE ASC;
    


  • 날짜 형식의 데이터를 비교하기 위해서는 BETWEEN을 사용하거나 YEAR() 함수 등을 활용하여 연도를 비교하는 것이 더 적절하다.

    1
    2
    3
    4
    5
    
      -- 오답
      SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS "PUBLISHED_DATE" 
      FROM BOOK
      WHERE PUBLISHED_DATE LIKE '2021%' AND CATEGORY = '인문'
      ORDER BY PUBLISHED_DATE ASC;
    
    • LIKE '2021%'은 일반적으로 문자열 비교에 사용되는데, PUBLISHED_DATE는 날짜 형식의 데이터이다. 날짜 형식의 데이터에 대해 LIKE를 사용하는 것은 일치하지 않는 형식으로 비교를 시도하는 것이라 오류를 발생시킬 수 있다.


  • 실행 결과

실행 결과

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