TO_CHAR()과 EXTRACT()

문해피와 제육볶음·2023년 6월 18일
0

데이터베이스

목록 보기
4/13

갑자기 요일별이나 월별 제일 많이 사용한게 뭐에요?
라고 물어보시면 당차게 알았다고 말씀드리고 뒤돌아 이런표정을 짓곤 합니다.
항상 말하지만 기본이 중요하다고 생각하기때문에 이런표정 안나오게 잘해보자고요 🌚


🦧 TO_CHAR()

잘보면 이모티콘 같고 귀엽네요
제가 연도와 월별로 사용량을 보기위해서 많이 사용하는 함수입니다.
이론적으로 설명 하자면 날짜나 숫자 데이터를 지정된 형식의 문자열로 변환하는 함수입니다.

TO_CHAR(value,format) 기본적인 형식은 이렇게 되어있습니다.

  • value : 날짜나 숫자 데이터로 변환하려는 값입니다.
  • format : 변환하려는 날짜 또는 숫자의 형식을 지정하는 문자열입니다. 형식 문자열의 경우, 공식 문서에서 지원되는 형식의 문자열을 참조하여 사용할 수 있습니다.

🙈 년도의 월별 사용량 보기

그러면 앞에서 알려드린 TO_CHAR()함수를 이용해서 년도의 월별 사용량을 알아볼까요??

💡 그렇다면 제일먼저 format을 정해주여야 합니다.
년도의 월별을 할것이기 때문에 format의 형식은 YYYY-MM으로 해야하겠습니다.
그 다음 지정한 format을 기준으로 그룹을 잡은후 중복을 제거한 userid의 개수를 알아야합니다.

SELECT TO_CHAR(ts, 'YYYY-MM') as mon, COUNT(DISTINCT userid) as USERCOUNT
FROM session_data
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10;

이렇게 쿼리를 하게 된다면 월별 사용자가 가장많은 달을 찾을수 있습니다.


🦍 EXTRACT()

사용자가 가장 많은 달은 위의 쿼리처럼 하면 알수 있었습니다.
그렇다면 사용자가 가장 많은 시간이나 요일은 어떻게 알수 있을까요??

그럴때 저는 EXTRACT()함수를 많이 사용하곤 합니다.

EXRTACT([사용할 형식] FROM [컬럼명]) 형식은 이렇게 되어있습니다.
설명을 하자면 [사용할 형식]에 원하는 것, HOUR나 DOW처럼 조건을 적어주고 대상이되는 [컬럼명]을 적어주면 완성이 됩니다.

🙊 형식의 종류

  • YEAR : 년도를 추출합니다.
  • QUARTER : 분기를 추출합니다 (1, 2, 3, 4 중 하나).
  • MONTH : 월을 추출합니다.
  • DAY : 일자를 추출합니다.
  • WEEK : 주를 추출합니다.
  • DAYOFWEEK (DOW) : 요일을 추출합니다 (1 (Sunday) 에서 7 (Saturday) 사이의 숫자).
  • DAYOFYEAR (DOY) : 해당 년도 속하는 날짜에서 몇 번째 날인지를 추출합니다.
  • HOUR : 시간을 추출합니다.
  • MINUTE : 분을 추출합니다.
  • SECOND : 초를 추출합니다.

위의 형식들을 사용해서 원하는 것들을 찾을수 있을거 같습니다.
그렇다면 간단한 예제로 사용량이 가장 많은 시간을 알아볼까요??

SELECT EXTRACT(HOUR FROM ts), COUNT(1)
FROM session_data
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10;

이렇게 하게 된다면 사용량이 가장많은 시간을 알수 있습니다.

알고나면 굉장히 쉽고 금방하는거지 말입니다.
이런걸 보면 아는게 힘이고 노하우라고 생각합니다.
별것 아니라고 생각하지말고 쉬워보이는것도 다시보고 익숙해져야 하는 저를 보았습니다... 🙉

0개의 댓글