2017-05-15 57 views
3

在我四處尋找時,我沒有找到任何簡單的答案,所以我想我會把它放在這裏以防萬一任何人遇到同樣的問題我本來應該是一個微不足道的問題。如何將Epoch時間戳轉換爲標準SQL中的日期

我對Google的BigQuery使用了ReDash分析,並在數據源設置中打開了Standard SQL。爲了查詢的目的,我需要將時間戳 - 以毫秒爲單位的時間戳(以字符串形式)轉換爲日期格式,以便我可以使用DATE_DIFF方法。

舉個例子...... "1494865480000""2017-05-15"

的困難是,鑄造和轉化率過於嚴格,而且似乎使其解析沒有足夠的辦法。在下面看到我的答案! (雖然讓我知道,如果一些SQL老師知道一個更雄辯的方式!)

+1

感謝分享這!不過,您是否將您的帖子設置爲問題和答案?您可以發佈自己的問題的答案。有關示例,請參閱https://stackoverflow.com/help/how-to-ask](How問)或查看google-bigquery標記下的其他一些問題和解答。 –

+0

當然可以。完成! –

回答

5

在標準SQL一起使用TIMESTAMP_MICROS功能與EXTRACT(DATE FROM <timestamp>)

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000)) 
+0

需要首先將該字符串強制轉換爲INT64。 –

0

使用UTC_USEC_TO_TIMESTAMP()

select UTC_USEC_TO_TIMESTAMP(postedon * 1000) 

可以使用date()然後提取日期:

select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000)) 

這沒有按」不需要知道Unix時間戳的內部格式。

+0

'UTC_USEC_TO_TIMESTAMP'似乎無法在[標準SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators)中使用 –

+0

'TIMESTAMP_MILLIS()'in #standardSQL,請參閱新的答案 –

1

大量的試驗和錯誤之後,這是我的解決方案:

DATE_ADD(DATE'1970-01-01', INTERVAL CAST((CAST(epochTimestamp AS INT64)/86400000) AS INT64) DAY) AS convertedDate

也就是說,我把字符串,將其轉換爲整數,在一天內將其劃分的毫秒數,然後使用DATE_ADD方法,並將結果添加到Epoch時間的開始,並計算結果日期。

我希望這可以節省另一個初中的時間!

2

一種更簡單的用TIMESTAMP_MILLIS()方法:

#standardSQL 
SELECT DATE(TIMESTAMP_MILLIS(CAST("1494865480000" AS INT64))) 

2017-05-15 
相關問題