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

问题描述 投票:16回答:3
  1. 我有日期存储在Epoch Time,我想从中提取Date。我尝试了下面的代码,我得到null作为输出。 date_add( (timestamp( Hp.ASSIGN_TIME)), 1970-01-01,"second" ) as Extracted_date_Epoch 出行时间格式(1424184621000000)
  2. 还有一个问题。下面的代码给了我正确的日子,但不是工作日,它给了所有的日子,是否有可能在大纪元时间存储两次之前的工作日? INTEGER(((Hp.ASSIGN_TIME - Hp.ARRIVAL_TIME) / 1000000) / 86400) as Days
sql google-bigquery
3个回答
19
投票

要将timestamp转换为date,您可以使用BigQuery date/time functions

SELECT TIMESTAMP(1424184621000000)       # 2015-02-17 14:50:21 UTC  
SELECT DATE(TIMESTAMP(1424184621000000)) # 2015-02-17   
SELECT DATE(TIMESTAMP('2015-02-17'))     # 2015-02-17   
SELECT INTEGER(TIMESTAMP('2015-02-17'))  # 1424131200000000

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

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)

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


18
投票

如果您在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中。


0
投票

如果您有Legacy SQL选项,要回答问题1,给定一个UNIX纪元时间列(以毫秒为单位),如1524375336000,

我用过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

© www.soinside.com 2019 - 2024. All rights reserved.