8

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

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

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

困难在于强制转换和转换过于严格,似乎没有足够的方法对其进行解析。请看下面我的回答!(尽管如果某些 SQL 老师知道更雄辩的方式,请告诉我!)

4

4 回答 4

12

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

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))
于 2017-05-15T16:36:30.370 回答
3

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

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

2017-05-15  
于 2017-05-17T04:35:02.410 回答
1

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

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

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

我希望这可以节省另一个小辈的时间!

于 2017-05-15T16:30:29.253 回答
0

使用UTC_USEC_TO_TIMESTAMP()

select UTC_USEC_TO_TIMESTAMP(postedon * 1000)

然后,您可以使用以下方法提取日期date()

select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))

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

于 2017-05-15T15:23:22.620 回答