在我环顾四周的时候,我没有找到任何简单的答案,所以我想我会把它放在这里,万一有人遇到与我相同的问题本来应该是一个小问题。
我在Google的BigQuery中使用了ReDash分析,并在数据源设置中打开了Standard SQL。出于我的查询的目的,我需要将时间戳 - 以毫秒为单位的unix时间(作为字符串)转换为Date格式,以便我可以使用DATE_DIFF方法。
举个例子...... "1494865480000"
到"2017-05-15"
困难在于转换和转换过于严格,似乎没有足够的方法来解析它。请参阅下面的答案! (虽然让我知道一些SQL sensei是否知道更有说服力的方式!)
答案 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时间戳的内部格式。