SQL

[SQL]시간 정보 추출(TIME, extract)

ollive 2024. 7. 1. 20:04

<문제>

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

<풀이1>

DATETIME에 날짜 시간데이터에서 time(시간변수)로 시간만 추출한 후 앞에 2개의 숫자만 가져왔다.

SELECT substr(time(DATETIME),1,2) as time, count(animal_id)
FROM ANIMAL_OUTS
where substr(time(DATETIME),1,2) between 9 and 20
group by 1
order by 1

 

where 절의 조건은 having 에서도 사용할 수 있었는데, group by 뒤에 오는 having 절에는 select 에서 지정한 변수명(time)을 사용하여 구할 수 있었다.

SELECT substr(time(DATETIME),1,2) as time, count(animal_id)
FROM ANIMAL_OUTS
group by 1
HAVING  time >= 9 AND time <= 19 
order by 1

 

<풀이2 : extracr(키워드 from 날짜/시간변수명)>

substr 말고, date_format(변수명, '%Y')와 같이 시간 정보만 가져오는 함수를 찾아보았다. 

DATETIME 변수가 DATETIME의 TYPE을 가지고 있어 년, 월, 일, 시(hour), 분(minute), 초(second)의 정보가 들어있다. 따라서 extract 함수를 사용하여 시간 정보를 추출할 수 있다. extract( 필요한시간/날짜 from 변수명)으로 사용한다.

SELECT extract(hour from DATETIME) as hh, count(1)
FROM ANIMAL_OUTS
group by 1
having hh between 9 and 20
order by 1

 

그 외 시간 관련 정보는 이 글을 참고하면 좋을 것이다.

 

SQL 기본 3. 시간 정보와 추출(Date, Timestamp, Time, Interval)

SQL에서는 크게 네 가지의 시간과 관련한 타입이 존재한다. (정확히는 현재 필자가 공부하고 있는 PostgreSQL을 기준으로) 1. Date : '일자'의 의미로 년,월,일의 정보만 가진다. 타입은 'YYYY-MM-DD'의 방

songmin9813.tistory.com