我在互联网上搜索了很多内容,但是堆栈却溢出了,但是没有找到令人满意的答案。
我正在尝试将表中的字符串日期列(如下所示)转换为日期列格式:
日期:
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对其进行转换,但是我不能这样做。
谢谢。
答案 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))