개요
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_;
'데이터베이스 > snowflake' 카테고리의 다른 글
[snowflake] snowflake DashBoard 사용법 (0) | 2024.07.23 |
---|---|
[snowflake] send to email in snowflake, snowflake CALL SYSTEM$SEND_EMAIL (0) | 2024.07.23 |
[snowflake] snowflake Connected IP List Selection (0) | 2024.07.23 |
[snowflake] 비용(크레딧) 소모 3가지 유형 (1) | 2024.02.13 |