web-dev-qa-db-ja.com

標準SQLでエポックタイムスタンプを日付に変換する方法

見回している間、これに対する簡単な答えは見つからなかったので、些細な問題であるはずの誰かが私と同じ問題を抱えている場合に備えて、ここに置いておこうと思いました。

私はGoogleのBigQueryでReDash分析を使用していて、データソース設定で Standard SQL をオンにしていました。私のクエリでは、DATE_DIFFメソッドを使用できるように、タイムスタンプ(ミリ秒単位のUNIX時間)を文字列として日付形式に変換する必要がありました。

例として... "1494865480000"から"2017-05-15"

問題は、キャストと変換が非常に厳しく、解析するための適切な方法がないように思われたことです。以下の私の答えを見てください! (SQLの先生がもっと雄弁な方法を知っているかどうか教えてください!)

8
Joseph Wolf

標準SQLでは、EXTRACT(DATE FROM <timestamp>)とともにTIMESTAMP_MICROS関数を使用します。

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))
10

TIMESTAMP_MILLIS()を使用した簡単な方法:

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

2017-05-15  
3
Felipe Hoffa

多くの試行錯誤の後、これが私の解決策でした:

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

つまり、文字列を取得して整数にキャストし、1日のミリ秒数で割った後、DATE_ADDメソッドを使用して、結果をエポック時間の開始に追加し、結果の日を計算しました。

これで後輩が少し時間を節約できることを願っています!

1
Joseph Wolf

UTC_USEC_TO_TIMESTAMP()を使用:

_select UTC_USEC_TO_TIMESTAMP(postedon * 1000)
_

次に、date()を使用して日付を抽出できます。

_select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))
_

これは、Unixタイムスタンプの内部形式を知っている必要はありません。

0
Gordon Linoff