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

Posted

技术标签:

【中文标题】如何在标准 SQL 中将 Epoch 时间戳转换为日期【英文标题】:How to convert an Epoch timestamp to a Date in Standard SQL 【发布时间】:2017-05-15 15:17:52 【问题描述】:

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

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

例如..."1494865480000""2017-05-15"

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

【问题讨论】:

感谢分享!不过,您介意将您的帖子设置为问题和答案吗?您可以发布自己问题的答案。请参阅 [***.com/help/how-to-ask](How 提问)或查看 google-bigquery 标签下的其他一些问题和答案以获取示例。 当然可以。完成! 【参考方案1】:

在标准 SQL 中,将 TIMESTAMP_MICROS 函数与 EXTRACT(DATE FROM <timestamp>) 一起使用:

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))

【讨论】:

需要先将字符串转换为 INT64。【参考方案2】:

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

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

2017-05-15  

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

使用UTC_USEC_TO_TIMESTAMP():

select UTC_USEC_TO_TIMESTAMP(postedon * 1000)

然后您可以使用date() 提取日期:

select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))

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

【讨论】:

UTC_USEC_TO_TIMESTAMP 在Standard SQL 中似乎不可用 TIMESTAMP_MILLIS() 在#standardSQL 中,查看新答案

以上是关于如何在标准 SQL 中将 Epoch 时间戳转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

在 T-SQL 中将以毫秒为单位的 Epoch 转换为日期

如何在 BigQuery 标准 SQL 中将时间戳转换为秒

将 Epoch 时间戳转换为 sql server(人类可读格式)

如何在 SAP SQL Anywhere 中将 UTC 时间戳转换为命名时区?

在Android中将Epoch时间转换为日期并将日期转换为Epoch时间[重复]

如何将时间戳从十六进制格式转换为 EPOCH 时间戳?