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