본문 바로가기

Wiki/SQL

Spark SQL에서 두 날짜의 차이 구하기(DATETIME, TIMESTAMP)

Spark SQL에서 두 날짜의 차이를 구하는 방법에 관한 글입니다.

배경

Spark SQL 함수에는 DATE 끼리의 차이를 구하는 함수는 있습니다(DATE_SUB). 하지만, TIMESTAMP(DATETIME) 끼리의 차이를 구하는 함수는 없습니다. 따라서 다른 방법으로 우회해서 구하는 수밖에 없습니다. 참고로 DATE와 TIMESTAMP의 차이는 아래와 같습니다.

  • DATE : 2022-09-01
  • TIMESTAMP(DATETIME) : 2022-09-01 00:00:00

UNIX_TIMESTAMP로 두 날짜의 차이 구하기

결론부터 말하자면, 두 DATETIME을 UNIX 시간으로 변환해준 후 차이를 구해야 합니다.

SELECT UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) AS diff_seconds,
       UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) / 60 AS diff_minutes,
       UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) / 60 / 60 AS diff_hours,
       ROUND(UNIX_TIMESTAMP(시간1) - UNIX_TIMESTAMP(시간2) / 60 / 60, 1) AS diff_hours_round

 

  • 첫 번째 줄은, 두 시간의 차이를 초(Seconds)로 반환하는 방식입니다.
  • 두 번째 줄은, 두 시간의 차이를 분(Minutes)로 반환하는 방식입니다.
  • 세 번째 줄은, 두 시간의 차이를 시간(Hours)로 반환하는 방식입니다.
  • 네 번째 줄은, 두 시간의 차이를 시간(Hours)으로 반환하고, ROUND 함수를 이용해서 소수점 한 자리 수까지 출력하는 방식입니다.