코딩테스트

[26.03.25 코테/회고(MySQL/Oracle)]-입양 시각 구하기(1)

지니248 2026. 3. 25. 12:48

Lv2. 입양 시각 구하기(1) (MySQL) 

링크: https://school.programmers.co.kr/learn/courses/30/lessons/59412

 

내가 작성한 코드

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
-- WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR
ORDER BY HOUR;

 

Oracle

SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS 
WHERE TO_CHAR(DATETIME, 'HH24') BETWEEN 9 AND 19
GROUP BY TO_CHAR(DATETIME, 'HH24')
ORDER BY TO_CHAR(DATETIME, 'HH24');

문제 회고

1. 시간 정보 추출

- MySQL

   - HOUR(날짜) : 시간

   - MINUTE(날짜) : 분

   - SECOND(날짜) : 초

   - MICROSECOND(날짜) : 마이크로초

- Oracle

   - TO_CHAR(날짜, 'HH') : 시간(12시간 형식(01~12)) → AM/PM과 함께 써서 TO_CHAR(날짜, 'AM HH:MI') 처럼 사용한다

   - TO_CHAR(날짜, 'HH24') : 시간(24시간 형식(00~23))

   - TO_CHAR(날짜, 'MI') : 분

   - TO_CHAR(날짜, 'SS') : 초 

   - TO_CHAR(날짜, 'AM'/'PM') : 오전/오후

2. 시간 범위 지정

- BETWEEN

   - 코드가 짧고 9시부터 19시까지라는 의미가 한눈에 들어온다

   - 이상/이하(=<, >=)를 포함하므로 경계값에 주의해야한다

- 부등호

   - 조건 지정이 명확하고 소수점 데이터나 복잡한 범위를 다룰 때 사용한다

3. Oracle의 데이터 타입 변환

- TO_CHAR(DATETIME, 'HH24')로 작성했더니 오류가 발생했다

- HOUR의 결과값에 09라고 출력이 된다 (↓ 아래 사진1 참조)

- 틀린 이유:

   - TO_CHAR함수만 사용하면 시간값이 앞자리에 0이 포함된 문자열 형태로 출력된다

   - 문제에서 요구하는 출력 형식인 숫자형으로 맞추기 위해 추출한 결과값을 다시

     TO_NUMBER()로 감싸주어 불필요한 '0'을 제거한다

 

사진1) HOUR에 불필요한 09시간