본문 바로가기
데이터베이스/snowflake

[snowflake] 현재 날짜 및 시간을 반환하는 함수

by ordinary_daisy 2025. 1. 10.

개요

Snowflake에서 현재 시간을 나타내는 다양한 함수들이 있으며, 각각의 함수는 약간의 차이가 있습니다. 아래는 주요 함수들과 그 차이에 대해 설명한 내용입니다.

 


1. GETDATE()

 

  • 설명:
    • GETDATE() 함수는  세션 타임존을 기준으로 현재 날짜와 시간을 반환합니다.
    • 즉, ALTER SESSION SET TIMEZONE 명령어로 세션 타임존을 변경하면 그 변경된 타임존을 반영하여 시간이 출력됩니다
  • 반환 형식: TIMESTAMP_LTZ (로컬 타임존을 기준으로 한 타임스탬프)
  • 특징: Snowflake에서는 기본적으로 타임스탬프가 로컬 타임존을 기준으로 반환됩니다.
SELECT GETDATE();

 

 

2. SYSDATE()

 

  • 설명:
    • SYSDATE() 함수도 현재 날짜와 시간을 반환하지만, 시스템의 시간대에 맞추어 반환됩니다.
    • 서버의 시스템 시간, UTC 기준으로 반환됩니다. 세션 타임존을 변경해도 SYSDATE()는 서버의 시스템 시간을 기준으로 그대로 반환되므로, 세션 타임존과는 관계없이 결과가 달라지지 않습니다.
  • 반환 형식: TIMESTAMP_LTZ
  • 특징: SYSDATE()와 GETDATE()는 거의 동일하게 사용됩니다.
SELECT SYSDATE();

 

 

3. CURRENT_TIMESTAMP

  • 설명: CURRENT_TIMESTAMP는 현재 날짜와 시간을 반환합니다. GETDATE()와 동일한 동작을 합니다.
  • 반환 형식: TIMESTAMP_LTZ
  • 특징: CURRENT_TIMESTAMP는 GETDATE()의 동의어로 사용됩니다. 표준 SQL 함수로서 사용되며, SYSDATE()와도 동일합니다.
SELECT CURRENT_TIMESTAMP;

4. CURRENT_TIME

  • 설명: CURRENT_TIME는 현재 시간을 반환합니다. 날짜는 포함되지 않으며, TIMESTAMP_LTZ 형식으로 반환됩니다.
  • 반환 형식: TIME_LTZ
  • 특징: 날짜 정보 없이 현재 시간만 반환되므로, 주로 시간을 추출할 때 사용됩니다.
SELECT CURRENT_TIME;

 

5. CURRENT_DATE

  • 설명: CURRENT_DATE는 현재 날짜만 반환합니다. 시간 정보는 포함되지 않습니다.
  • 반환 형식: DATE
  • 특징: 현재 날짜를 반환하며, 시간 정보는 포함되지 않습니다.
SELECT CURRENT_DATE;

 

6. LOCALTIMESTAMP

  • 설명: LOCALTIMESTAMP는 현재 날짜와 시간을 반환하며, GETDATE()와 비슷하지만 UTC를 기준으로 반환됩니다. TIMESTAMP_LTZ 형식으로 반환됩니다.
  • 반환 형식: TIMESTAMP_LTZ
  • 특징: 기본적으로 UTC를 기준으로 반환되므로, 로컬 타임존에 맞게 변환이 필요할 수 있습니다.
SELECT LOCALTIMESTAMP;

GETDATE()와 SYSDATE()가 다른 경우

Snowflake에서 GETDATE()세션의 타임존에 따라 달라지고, SYSDATE()세션의 타임존에 관계없이 UTC 기준으로 현재 날짜와 시간을 반환합니다 . 두 함수는 동일한 시스템 시간을 반환하는 것처럼 보일 수 있지만, 세션의 타임존시스템의 타임존 차이로 인해 결과 값이 달라질 수 있습니다.

 

GETDATE()함수로 원하는 타임존의 현재 시간을 반환하고 싶은 경우, 아래 순서대로 확인해보세요

 

1. 현재 세션의 타임존 확인

지금 접속되어 있는 세션의 타임존을 조회

SHOW PARAMETERS LIKE 'TIMEZONE';

 

제가 실행하는 세션에선 'America/Los_Angeles' 로 설정되어 있네요.

 

2. 타임존 변환

세션의 타임존을 변경하거나, 다른 타임존으로 변환하여 사용하고 싶다면 ALTER SESSION 명령을 사용하여 세션 타임존을 설정할 수 있습니다. 예를 들어, 세션 타임존을 서울 시간대로 설정한 후 타임존을 다시 확인해보면

ALTER SESSION SET TIMEZONE = 'Asia/Seoul';

SHOW PARAMETERS LIKE 'TIMEZONE';

 

 3. GETDATE()로 현재 시간 반환

변경된 타임존 기준으로 현재 시간을 맞게 반환하는 지 확인해보자.

select getdate() as getdate_;

 

시간이 일치하는 것을 확인할 수 있다.

 


세션의 타임존에 관계없이 일정한 타임존의 시간을 반환하고 싶은 경우, SYSDATE()를 활용하자

SYSDATE()와 타임존 변환 함수인 convert_timezone({before_timezone},{after_timezone},{time_function}) 을 사용하면, 일정한 결과를 기대할 수 있다.

 

예시

-- seoul current timestamp return
select convert_timezone('UTC','Asia/Seoul',sysdate()) as seoul_timestamp_;

-- Los_Angeles current timestamp return
select convert_timezone('UTC','America/Los_Angeles',sysdate()) as Los_Angeles_timestamp_;