포스트

입양 시각 구하기(2)

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

문제

  • 문제 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      SELECT D.HOUR, COUNT(D.HOUR) AS "COUNT"
      FROM (
           SELECT LEVEL -1 AS "HOUR"
           FROM DUAL
           CONNECT BY LEVEL < 25
           ) D
       LEFT JOIN ANIMAL_OUTS O
       ON D.HOUR = TO_CHAR(O.DATETIME, 'FMHH24')
       GROUP BY D.HOUR
       ORDER BY D.HOUR;
    
    • TO_CHAR 함수에서 “FM” 키워드는 숫자나 날짜의 형식에서 나타나는 불필요한 leading zero(앞에 나타나는 0)를 제거하는 데 사용된다. “FM” 키워드를 사용하면 포맷 문자 다음에 나타나는 leading zero가 제거된다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
      SELECT 
          HOURS.HOUR,
          COUNT(HOUR_COUNT.ANIMAL_ID) AS "COUNT"
      FROM (
          SELECT 
              TO_CHAR(DATETIME, 'HH24') AS "HOUR",
              ANIMAL_ID
          FROM ANIMAL_OUTS
      ) HOUR_COUNT
      RIGHT JOIN (
          SELECT LEVEL - 1 AS "HOUR"
          FROM DUAL
          CONNECT BY LEVEL <= 24
      ) HOURS
      ON HOUR_COUNT.HOUR = HOURS.HOUR
      GROUP BY HOURS.HOUR
      ORDER BY HOURS.HOUR;
    
    • ANIMAL_OUTS 테이블에서 시간대별로 입양된 동물의 건수를 조회한다. TO_CHAR(DATETIME, 'HH24')를 사용하여 DATETIME 필드에서 시간을 추출하고, RIGHT JOIN을 사용하여 0부터 23까지의 모든 시간대를 포함한 결과를 얻는다.

실행 결과


  • CONNECT BY LEVEL
    • 오라클에서 계층형 쿼리를 작성할 때 사용되는 구문 중 하나이다.
    • CONNECT BY LEVEL을 사용하면 트리 구조에서 어떤 단계에 있는지에 따라 값을 생성하거나 필터링할 수 있다.
    • CONNECT BY LEVEL을 사용하면 LEVEL을 활용하여 원하는 만큼의 행을 생성할 수 있다.


  • LEVEL
    • 오라클 데이터베이스에서 실행되는 모든 쿼리에서 사용 가능한 가상 열로, 계층적인 쿼리에서 어떤 단계(LEVEL)에 위치하는지를 나타내는 정수값이다.
    • 즉, 계층의 단계를 나타내는 정수값으로, 주로 계층적인 데이터를 다룰 때 사용된다. 1부터 사용자가 지정한 범위까지 LEVEL 값이 증가하면서 행을 생성한다.
    • 계층적인 쿼리가 아니라면, LEVEL은 기본적으로 모든 값이 0으로 설정된다. 즉, 계층이 없는 경우에는 모든 행이 동일한 단계(레벨 0)에 속한다고 간주한다.


  • DUAL 테이블과 CONNECT BY LEVEL을 사용하여 0부터 23까지의 숫자를 생성한다.

실행 결과


  • 날짜 및 시간 포맷 지정자
    • TO_CHAR(DATETIME, 'HH24')은 24시간 형식으로 시간을 나타내고, TO_CHAR(DATETIME, 'HH')는 12시간 형식으로 시간을 나타낸다.
      1. HH (12-hour clock)
      • HH는 12시간 형식의 시간을 나타낸다.
      • 01부터 12까지의 값을 가진다.
      • 오전(AM) 또는 오후(PM)를 나타내기 위해 AM 또는 PM을 사용한다.
      • 09:30 AM, 04:45 PM

      실행 결과

    1. HH24 (24-hour clock)
      • HH24는 24시간 형식의 시간을 나타낸다.
      • 00부터 23까지의 값을 가진다.
      • 오전과 오후의 구분이 없다.
      • 09:30, 16:45

      실행 결과

    2. FM(fill mode)
      • 숫자나 날짜를 형식화할 때 공백을 제거하는 서식 요소이다.
      • 여백이 제거되면서 숫자의 경우 왼쪽으로 정렬되고, 문자열의 경우 앞뒤 공백이 제거된다.


  • 오답

실행 결과


  • 실행 결과

실행 결과

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