如何在 BigQuery 中以字符串格式将工作日月份转换为日期?

Posted

技术标签:

【中文标题】如何在 BigQuery 中以字符串格式将工作日月份转换为日期?【英文标题】:How do I cast spelled out weekday month in string format to date in BigQuery? 【发布时间】:2016-09-22 06:11:36 【问题描述】:

我想在 Bigquery 中将我拼写的工作日和月份转换为时间戳格式。

我的日期当前存储为Mon Jul 27 07:08:00 +0000 2015,我想将它们转换为2015-07-27 07:08:00 UTC

我已阅读How do I cast dd/mm/yyyy string into date in BigQuery? 的答案并尝试按以下方式对其进行格式化

SELECT TIMESTAMP(year + '-' + month + '-' + day) as output_timestamp
FROM (
  SELECT 
REGEXP_EXTRACT(created_at, '.*/([0-9]4)$') as year, 
REGEXP_EXTRACT(created_at, '^([0-9]2).*') as day, 
REGEXP_EXTRACT(created_at, r'(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)') AS month  
)

[dataset.tablename] where collected_at = "2016-01-01 00:00:01" LIMIT 100

但是,我收到此错误query: SELECT query which references non constant fields or uses aggregation functions or has one or more of WHERE, OMIT IF, GROUP BY, ORDER BY clauses must have FROM clause. (error code: invalidQuery)

我怎样才能把它转换成我想要的格式?

【问题讨论】:

【参考方案1】:

使用Standard SQL,你有很多format elements的PARSE_TIMESTAMP函数,所以你可以把你的字符串转换成TIMESTAMP,如果以后你需要用它构建自定义字符串,你可以使用@987654325 @。 在您的示例中,以下格式字符串将起作用:

SELECT PARSE_TIMESTAMP("%a %b %d %T +0000 %E4Y", t) FROM
(SELECT 'Mon Jul 27 07:08:00 +0000 2015' t)

使用的格式:

%a - Abbreviated weekday
%b - Abbrevialted month
%d - Time in HH:MM:SS
%E4Y - 4 digits year

【讨论】:

非常感谢。对于那些可能尝试这样做的人,您还需要取消选中 SQL Version Use Legacy SQL 以便此代码工作。否则,您将收到“bigquery 错误:2.24 - 2.84”。

以上是关于如何在 BigQuery 中以字符串格式将工作日月份转换为日期?的主要内容,如果未能解决你的问题,请参考以下文章

将日期转换为格式日、日月年

如何在bigquery中以最少的数据库命中执行多个sql

在 Beam 管道中以编程方式生成 BigQuery 架构

将文件中以换行符分隔的 JSON 上传到 BigQuery

如何使用基于自定义参数的表名中类似于 python 的字符串格式查询谷歌数据工作室中的 bigquery 表?

如何在 BigQuery 客户端 Python API 中以原子方式覆盖表