如何在标准 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 时间戳转换为日期的主要内容,如果未能解决你的问题,请参考以下文章
将 Epoch 时间戳转换为 sql server(人类可读格式)
如何在 SAP SQL Anywhere 中将 UTC 时间戳转换为命名时区?