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

时间:2019-03-20 17:34:29

标签: google-bigquery

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

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

日期:

20190303

20190304

20190305

20190306

进入

日期:

2019/03/03

2019/03/04

2019/03/04

2019/03/05

2019/03/06。

我尝试了以下查询:

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对其进行转换,但是我不能这样做。

谢谢。

1 个答案:

答案 0 :(得分:2)

以下是用于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))