如何在BigQuery SQL中从纪元时间中提取日期

Zia*_*a J 16 sql google-bigquery

  1. 我有日期存储Epoch Time,我想从中提取 Date.我尝试了下面的代码,我得到null了输出.

    date_add( (timestamp( Hp.ASSIGN_TIME)), 1970-01-01,"second" ) as Extracted_date_Epoch
    
    Run Code Online (Sandbox Code Playgroud)

    出行时间格式(1424184621000000)

  2. 还有一个问题.下面的代码给了我正确的日子,但不是工作日,它给了所有的日子,是否有可能在大纪元时间存储两次之前的工作日?

    INTEGER(((Hp.ASSIGN_TIME - Hp.ARRIVAL_TIME) / 1000000) / 86400) as Days
    
    Run Code Online (Sandbox Code Playgroud)

Qor*_*ani 20

要转换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
Run Code Online (Sandbox Code Playgroud)

要计算两个日期之间的天数(例如,在2015年6月1日至2015年6月20日之间),您可以执行以下操作:

SELECT (DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)
Run Code Online (Sandbox Code Playgroud)

最后计算工作日,您可以使用以下内容:

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)
Run Code Online (Sandbox Code Playgroud)

这是简单的工作日计算,将周六和周日视为周末而不涉及任何假期.

  • 这仅适用于传统模式.```参数类型的函数TIMESTAMP没有匹配的签名:INT64.支持的签名:TIMESTAMP(STRING,[STRING]); TIMESTAMP(日期,[STRING]); TIMESTAMP(DATETIME,[STRING])在[1:8]``` (9认同)

Kri*_*naa 19

如果您在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_MICROS(visitStartTime*1000000)非常适合GA数据,谢谢! (3认同)