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'을 제거한다

'코딩테스트' 카테고리의 다른 글
| [26.03.27 코테/회고(MySQL)]-부모의 형질을 모두 가지는 대장균 찾기 (0) | 2026.03.27 |
|---|---|
| [26.03.26 코테/회고(MySQL/Oracle)]-입양 시각 구하기(2) (0) | 2026.03.26 |
| [26.03.24 코테/회고(MySQL)]-없어진 기록 찾기 (0) | 2026.03.24 |
| [26.03.23 코테/회고(MySQL/Oracle)]-년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2026.03.23 |
| [26.03.20 코테/회고(MySQL)]-업그레이드 할 수 없는 아이템 구하기 (0) | 2026.03.20 |