2017-05-15 16 views
3

私が見ている間にこれに対する簡単な答えが見つかりませんでしたので、誰かが同じ問題を抱えていた場合に備えて、私は些細な問題であったはずのものを持っていました。Epochのタイムスタンプを標準SQLの日付に変換する方法

GoogleのBigQueryでReDashアナリティクスを使用していて、データソース設定でStandard SQLを有効にしていました。私のクエリの目的のために、DATE_DIFFメソッドを使用できるように、文字列としてのタイムスタンプ - unix時間をミリ秒単位でDate形式に変換する必要がありました。

例として... "1494865480000"

"2017-05-15"の難しさは、鋳造、変換が過度に厳格だったということであり、それはパースにする充分な方法はありませんように見えました。下の私の答えを見てください! (ただし、いくつかのSQLの先生は、より雄弁な方法を知っているなら、私に知らせて!)

+1

ありがとう!あなたはあなたの投稿を質問と回答の両方として設定しても構いませんか?自分の質問への回答を投稿することができます。例については、[https://stackoverflow.com/help/how-to-ask](How to ask)]やgoogle-bigqueryタグの他の質問と回答をご覧ください。 –

+0

確かです。完了! –

答えて

5

EXTRACT(DATE FROM <timestamp>)と一緒TIMESTAMP_MICROS機能を使用します。

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)) 

これは」doesnの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メソッドを使用して、結果をエポック時間の開始に追加し、結果の日を計算しました。

私はこれで別のジュニアの時間を節約したいと思います!標準SQLでは

2

TIMESTAMP_MILLISとの簡単な方法():これを共有するための

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

2017-05-15 
関連する問題