Snowflake

從時間戳獲取時間段

  • November 4, 2019

你好,我的小雪花,我怎樣才能隔離時間戳的正確時間部分?

SELECT CURRENT_TIMESTAMP()                                                                                                                   AS a,
      CURRENT_TIMESTAMP() :: timestamp_ntz                                                                                                  AS b,
      CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP)                                                                                            AS c,
      TO_TIME(CURRENT_TIMESTAMP)                                                                                                            AS d,
      TIME_FROM_PARTS(DATE_PART(hour, CURRENT_TIMESTAMP()), DATE_PART(minute, CURRENT_TIMESTAMP()), DATE_PART(second, CURRENT_TIMESTAMP())) AS e 

生產

A                   B                   C                   D        E        
------------------- ------------------- ------------------- -------- -------- 
2017-06-11 20:33:00 2017-06-11 18:33:00 2017-06-11 20:33:00 12:33:00 12:33:00 

我只是想20:33:00

在我的情況下執行SHOW PARAMETERS LIKE 'TIMEZONE';返回:

key         value               default                
TIMEZONE    America/Los_Angeles America/Los_Angeles 

SELECT CURRENT_TIMESTAMP()結果2019-11-04 07:48:47.289 -0800

然後我可以像這樣更改會話參數ALTER SESSION SET TIMEZONE = 'Europe/Amsterdam';

現在SHOW PARAMETERS LIKE 'TIMEZONE';給出:

key         value               default 
TIMEZONE    Europe/Amsterdam    America/Los_Angeles

SELECT CURRENT_TIMESTAMP()導致2019-11-04 16:49:45.987 +0100

這有望顯示背後的邏輯CURRENT_TIMESTAMP

回答實際問題:要獲得時間部分,只需使用TIMESTAMP::TIME

SELECT 
CURRENT_TIMESTAMP() :: TIME AS Amsterdam_Time,
CONVERT_TIMEZONE('America/Los_Angeles', CURRENT_TIMESTAMP)::TIME AS LA_Time,
CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP)::TIME AS UTC_Time;

結果(預設為阿姆斯特丹):

AMSTERDAM_TIME  LA_TIME     UTC_TIME
16:55:37        07:55:37    15:55:37

嘗試

alter session set time_output_format = 'HH24:MI:SS.FF';

docs開始,但我的猜測是它應該是預設值。

如果您還沒有開始使用雪花編寫應用程序,那麼它讀起來就像是一團煙霧。您可能想先嘗試 PostgreSQL,看看它是否滿足您的需求。

如果這不起作用,您可能想嘗試..to_timestamp

SELECT to_timestamp(CURRENT_TIMESTAMP(), 'HH24:MI:SS.FF') AS a;

引用自:https://dba.stackexchange.com/questions/176008