如何将 Epoch 时间戳转换为标准 SQL 中的日期

How to convert an Epoch timestamp to a Date in Standard SQL

我环顾四周时没有找到任何简单的答案,所以我想我会把它放在这里,以防有人遇到和我一样的问题,这本来应该是一个微不足道的问题。

我将 ReDash 分析与 Google 的 BigQuery 结合使用,并在数据源设置中启用了 Standard SQL。出于我的查询目的,我需要将时间戳(以毫秒为单位的 unix 时间,作为字符串)转换为日期格式,以便我可以使用 DATE_DIFF 方法。

举个例子……"1494865480000""2017-05-15"

困难在于转换和转换过于严格,似乎没有足够的方法让它解析。请在下面查看我的答案! (尽管如果某些 SQL 老师知道更 eloquent 的方法,请告诉我!)

使用UTC_USEC_TO_TIMESTAMP():

select UTC_USEC_TO_TIMESTAMP(postedon * 1000)

然后您可以使用 date():

提取日期
select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))

这不需要知道 Unix 时间戳的内部格式。

经过反复试验,这是我的解决方案:

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

也就是说,我把这个字符串,转换成一个整数,除以一天的毫秒数,然后使用了一个DATE_ADD方法,并将结果添加到大纪元时间的开始, 并计算结果日。

我希望这能为另一个小学生节省一些时间!

在标准 SQL 中使用 TIMESTAMP_MICROS 函数和 EXTRACT(DATE FROM <timestamp>):

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))

使用 TIMESTAMP_MILLIS() 的更简单方法:

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

2017-05-15