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

时间:2017-05-15 15:17:53

标签: sql google-bigquery standard-sql

在我环顾四周的时候,我没有找到任何简单的答案,所以我想我会把它放在这里,万一有人遇到与我相同的问题本来应该是一个小问题。

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

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

困难在于转换和转换过于严格,似乎没有足够的方法来解析它。请参阅下面的答案! (虽然让我知道一些SQL sensei是否知道更有说服力的方式!)

4 个答案:

答案 0 :(得分:8)

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

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))

答案 1 :(得分:3)

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

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

2017-05-15  

答案 2 :(得分:1)

经过多次试验和错误,这是我的解决方案:

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

也就是说,我接受了字符串,将其转换为整数,将其除以一天中的毫秒数,然后使用DATE_ADD方法,并将结果添加到Epoch时间的开始,并计算得到的日期

我希望这能节省另一个大三的时间!

答案 3 :(得分:0)

使用select UTC_USEC_TO_TIMESTAMP(postedon * 1000)

date()

然后,您可以使用select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))

提取日期
allowed_types=>'*'

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