[BigQuery] 날짜/시간 데이터 - 알아두면 쓸모있는 시간 함수

y1nlog·2025년 1월 17일
0

날짜/시간 데이터 타입 파악하기

중요한 3가지는 꼭 기억하자 !

  • DATE : DATE만 표시
  • DATETIME : DATE+TIME
  • TIME : 시간
  • TIMESTAMP : 시간도장 (= UTC부터 경과한 시간을 나타내는 값)
    Time Zone 정보를 가지고 있다. e.g. 2023-12-31 14:00:00 UTC

시간 데이터 다루기

타임존

GMT : 영국 그리니치 천문대 기준
한국시간 GMT +9

UTC : Universal Time Coordinated, 협정세계시
한국시간 UTC +9

타임존이 존재한다는 사실을 기억하기 🐱

ms, millisecond (자주 사용)

천 분의 1초(1,000ms = 1초)
빠른 반응이 필요한 분야에서 사용(초보다 더 정확)

ms => TIMESTAMP => DATETIME 으로 변경해 사용한다. (mainly)

us, microsecond

1/1,000ms = 1/1,000,000초


날짜/시간 데이터 타입 변환

시간데이터 간의 변환
대부분 회사 테이블에는 TIMESTAMP로 통일되어 있다.(또는 DATETIME)
TIMESTAMP-DATETIME 변환해야 하는 경우가 있으니, 알아두기

[Quiz.] 1704175819711ms ?
2024-01-02 15:26:59(DATETIME)를 의미한다.
당황하지 말자~

  • TIMESTAMP / DATETIME 비교

시간 함수(두 시간의 차이, 특정 부분 추출하기)

DATETIME 함수

CURRENT_DATETIME([time_zone])

: 현재 DATETIME을 출력한다.

괄호 안에 <타임존> 정보를 넣지 않으면 UTC 기준으로 출력된다.
쿼리 결과에서 한국 시간과 UTC 간 9시간 시차를 확인 가능!

EXTRACT

: DATETIME에서 특정 부분만 추출하고 싶은 경우

특정부분 - 연도/월/일

예를 들면, DB에 주문 DATETIME이 있고,
월별 주문/일별 주문과 같은 정보를 추출하고 싶을 때 사용할 수 있겠다.

// 사용방법
EXTRACT(part FROM datetime.expression)

특정 파트DATETIME.표현에서 뽑아내자~
이런 구문으로 사용할 수 있음.

date / year / month / day / hour / minute
다 쪼갤 수 있다.

EXTRACT - 요일 추출

EXTRACT(DAYOFWEEK FROM datetime_col)
: 한 주의 첫 날이 일요일인 값이 나온다는 점!

DATETIME_TRUNC - DATE와 HOUR만 남기고 싶을 때

시간 자르기 함수.

자르는 기준은 DATETIME ~~~를 넣어준 후, 다음 인자로
[ DAY / YEAR / MONTH / HOUR ] 등을 넣는다.

그럼 나오는 결과값, 넣은 기준 이하는 기본값으로 출력된다.

e.g. DATETIME_TRUNC(DATETIME "2025-01-18 01:43:31", MONTH)
(result) => 2025-01-01T00:00:00

쓸모?
EXTRACT / DATETIME_TRUC 둘 다 알아놓고,
DATE, HOUR까지만 남기고 아래 분/초 단위는 없애고 싶을 땐 후자를 이용하는 것으로~~~

PARSE_DATETIME

: 문자열로 저장된 DATETIME을 DATETIME 타입으로 바꾸고 싶을 때 사용한다.

이거 너무... 필요했던 것.... 빅쿼리 환경에선 안썼지만, sql 안 하는 요즘도 강의 들으며 솔깃하는 함수다.

사용방법은

PARSE_DATETIME('문자열 형태', 'DATETIME 문자열') AS datetime

문자열 형태 예시가 극악..이지만 month, day만 소문자라고 생각하면 할 만 하다. 💪🐹

"파싱한다?"

파싱한다는 건 스트링, 문자열을 보고 분석해 알맞은 것으로 배치한다는 뜻으로 이해하면 되겠다.

FORMAT_DATETIME

DATETIME 타입의 데이터를 특정 형태의 문자열 데이터로 변환하고 싶은 경우.

PARSE_DATETIME 랑은 반대되는 개념으로 생각하면 된다.

파싱은 문자열 -> DATETIME
포맷은 DATETIME -> 문자열

LAST_DAY

: 마지막 날을 알고 싶은 경우 -> 자동으로 월의 마지막 날짜 값을 계산해 준다.

LAST_DAY(DATETIME)는 해당 월의 마지막 값을 반환한다.
추가로 인자를 넣을 수도 있는데, 생략할 경우 default값은 Month이다.

만약 인자로 WEEK를 넣어주면, 해당 주를 기준으로 마지막 날(default 토요일이 마지막)을 반환한다.

일요일이 한 주를 시작하는 요일로 세팅이 되어있는 건데, 이걸 바꿔주고 싶다면 위 예제 마지막 줄과 같이 WEEK(MONDAY) 지정을 해 주면 되겠다.
그럼 일요일이 마지막 날로 출력됨!

DATETIME_DIFF

: 두 DATETIME의 차이를 구할 때 사용한다.

DATETIME_DIFF(첫 번째 DATETIME, 두 번째 DATETIME, 궁금한 차이)

궁금한 차이 : _DAY, WEEK, MONTH _등

노트

오늘 들은 날짜/시간 데이터 총 정리를 가져와 봤다.

SQL 다루다 보면, 시간/날짜 데이터를 다룰 일이 많은데 빅쿼리 문법은 이렇구나 알아가는 시간이었다. 그리고 MySQL, Oracle도 닮은 점이 있는 것처럼 빅쿼리도 역시나 비슷한 점들이 꽤 많은 것 같다.

빅쿼리도 알아두고, 꾸준히 SQL 쿼리도 연습하다 보면 더 잘할 수 있겠지. 요즘 매일 빅쿼리 듣는 게 참 어려운데,, 짧은 시간 목표했지만 그것조차도 조금 어려운 느낌도 있어서 다시 습관화하는 게 중요할 것 같다.

추가공부 열심히!!

오늘 들은 DATETIME 관련 함수는 TIMESTAMP나 DATE에도 사용할 수 있으니까 대표적인 것들은 기억 속에 남겨두기로.. 💪😂

profile
FrontEnd Developer

0개의 댓글