如何将字符串日期列转换为 Google 大查询中的日期列?

Posted

技术标签:

【中文标题】如何将字符串日期列转换为 Google 大查询中的日期列?【英文标题】:How to convert a string date column to a date column in Google big Query? 【发布时间】:2019-03-20 17:34:28 【问题描述】:

我在互联网上搜索了很多堆栈溢出,但没有找到满意的答案。

我正在尝试将表格中的字符串日期列(如下所示)转换为日期列格式:

日期:

20190303

20190304

20190305

20190306

进入

日期:

2019/03/03

2019/03/04

2019/03/04

2019/03/05

2019 年 3 月 6 日。

我尝试了以下查询:

SELECT cast(concat(SUBSTR(date,0,4),'/',SUBSTR(date,5,2),'/',SUBSTR(date,7,2))) as date   
FROM `tfa-big-query.74006564.ga_sessions_*`  
LIMIT 10

它给我一个错误:“无效日期:'2019/03/03”

我认为我应该在 GBQ 中使用 PARSE_DATE 进行转换,但我无法这样做。

提前致谢。

【问题讨论】:

你试过用日期功能吗,这类问题的很多答案都可以在here 【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT date_as_yyymmdd, 
  PARSE_DATE('%Y%m%d', date_as_yyymmdd) AS date_as_date
FROM `project.dataset.table`  

您可以使用您问题中的示例数据对其进行测试,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '20190303' date_as_yyymmdd UNION ALL
  SELECT '20190304' UNION ALL
  SELECT '20190305' UNION ALL
  SELECT '20190306' 
)
SELECT date_as_yyymmdd, 
  PARSE_DATE('%Y%m%d', date_as_yyymmdd) AS date_as_date
FROM `project.dataset.table`

结果为

Row date_as_yyymmdd date_as_date     
1   20190303        2019-03-03   
2   20190304        2019-03-04   
3   20190305        2019-03-05   
4   20190306        2019-03-06    

注意:2019/03/03 不是 BigQuery 中 DATE 类型的正确表示 - 因此您会看到错误 - "Invalid date: '2019/03/03"

但如果出于某种原因您需要该格式 - 您可以添加 FORMAT_DATE() 到组合中,如下例所示

FORMAT_DATE('%Y/%m/%d', PARSE_DATE('%Y%m%d', date_as_yyymmdd))

【讨论】:

那么,我们必须在这里创建另一个列,对吧?我们可以对现有的“日期”列执行此操作吗? 如果你想用另一个字符串值更新字符串列 - 你可以使用 UPDATE。如果您对此还有其他问题 - 请发布包含所有相关详细信息的新问题

以上是关于如何将字符串日期列转换为 Google 大查询中的日期列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据框中的多个“字符串”列转换为日期时间列?

如何将Google Visualization API的日期列转换为JSON格式

jdbcTemplate 查询行映射日期列一般

将 Pandas DataFrame 中的日期对象列转换为字符串

如何将所有日期格式转换为日期列的时间戳?

SQL Server 查询(查看)将字符串转换为日期时间