web-dev-qa-db-ja.com

BigQuery SQLでエポック時間から日付を抽出するにはどうすればよいですか

  1. Epoch Timeに保存されている日付があり、Dateから抽出したいです。以下のコードを試したところ、nullが出力されました。

    date_add( (timestamp( Hp.ASSIGN_TIME)), 1970-01-01,"second" ) as Extracted_date_Epoch
    

    旧形式(1424184621000000)

  2. もう一つ質問。以下のコードは、営業日ではなく正確に日数を提供します。すべての日を提供します。エポック時間に2回保存された営業日だけを取得することは可能ですか?

    INTEGER(((Hp.ASSIGN_TIME - Hp.ARRIVAL_TIME) / 1000000) / 86400) as Days
    
16
Zia J

timestampdateに変換するには、 BigQuery日付/時刻関数 を使用できます。

SELECT TIMESTAMP(1424184621000000)         # 2015-02-17 14:50:21 UTC    
SELECT TIMESTAMP_MICROS(1230219000000000)  # 2008-12-25 15:30:00 UTC
SELECT TIMESTAMP_MILLIS(1230219000000)     # 2008-12-25 15:30:00 UTC
SELECT DATE(TIMESTAMP(1424184621000000))   # 2015-02-17 
SELECT DATE(TIMESTAMP('2015-02-17'))       # 2015-02-17 
SELECT INTEGER(TIMESTAMP('2015-02-17'))    # 1424131200000000

2つの日付の間の日数(たとえば、6/1/15〜6/20/15)を計算するには、次のようにします。

SELECT (DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)

最後に、営業日を計算するには、次を使用できます。

SELECT
   (DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)
  -(INTEGER((DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1) / 7) * 2)
  -(CASE WHEN DAYOFWEEK(TIMESTAMP('2015-06-01')) = 1 THEN 1 ELSE 0 END)
  -(CASE WHEN DAYOFWEEK(TIMESTAMP('2015-06-20')) = 7 THEN 1 ELSE 0 END)

これは土曜日と日曜日を週末とみなし、休日を含まない単純な営業日の計算です。

19
Qorbani

BigQueryでstandardSQLダイアレクトを使用している場合、この関数は人間が読めるタイムスタンプTIMESTAMP_MICROS(1424184621000000)-> 2015-02-17 14:50:21 UTCに変換します。参照: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#timestamp-string

または、TIMESTAMP_SECONDS(visitStartTime)を秒で指定します。 Google Analyticsで。

18
Krishnaa

レガシーSQLオプションがある場合、1524375336000などのミリ秒単位のUNIXエポック時間の列が与えられた場合、質問1に回答するには、

SELECT USEC_TO_TIMESTAMP(Hp.ASSIGN_TIME * 1000) AS the_date FROM table;を使用しました

_╔═══╦═══════════════╦═════════════════════════════╗
║   ║ ASSIGN_TIME   ║ the_date                    ║
╠═══╬═══════════════╬═════════════════════════════╣
║ 1 ║ 1524375336000 ║ 2018-04-22 05:35:36.000 UTC ║
╚═══╩═══════════════╩═════════════════════════════╝
_

USEC_TO_TIMESTAMP(<expr>)マイクロ秒単位のUNIXタイムスタンプをTIMESTAMPデータ型に変換します。

SELECT USEC_TO_TIMESTAMP(1349053323000000);

https://cloud.google.com/bigquery/docs/reference/legacy-sql#usec_to_timestamp

0
Kirby