关于sql:Bigquery将\\’\\’Jan 30 2016 12:00AM\\”转换为日期

Bigquery convert ''Jan 30 2016 12:00AM" to date

我正在尝试将字符串转换为 Bigquery 中的时间戳。问题真的很简单,如何将这个字符串 Jan 30 2016 12:00AMAug 9 2015 12:00AM 转换为日期?

我曾尝试参考 Bigquery 文档,但它似乎不起作用:
(https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#parse_date)
select PARSE_DATE('%b %e %E4Y', 'Jan 30 2016 12:00AM')
select PARSE_DATE('%b %e %E4Y', 'Aug 9 2015 12:00AM')


您的输入字符串实际上是一个时间戳,而不是日期,因为它在末尾有一个时间部分。因此,请考虑使用 PARSE_TIMESTAMP 代替:

1
2
SELECT PARSE_TIMESTAMP('%b %e %E4Y %I:%M%p', 'Jan 30 2016 12:00AM') AS ts_out
FROM yourTable;

这将根据输入字符串返回一个时间戳。如果你真的想要一个日期,你可以将上面的内容转换为日期,或者你可以在字符串输入上使用 LEFT 来限制只有日期部分:

1
2
SELECT PARSE_DATE('%b %e %E4Y', LEFT('Jan 30 2016 12:00AM', 11)) AS ts_out
FROM yourTable;

以下是 BigQuery 标准 SQL

1
SELECT DATE(PARSE_TIMESTAMP('%b %e %Y %R%p', ts))

您可以使用虚拟数据对其进行测试,如下例

1
2
3
4
5
6
7
8
#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Jan 30 2016 12:00AM' ts UNION ALL
  SELECT 'Aug  9 2015 12:00AM' UNION ALL
  SELECT 'Aug 9 2015 12:00AM'
)
SELECT ts, DATE(PARSE_TIMESTAMP('%b %e %Y %R%p', ts)) date_from_ts
FROM `project.dataset.table`

结果

1
2
3
4
ROW ts                  date_from_ts    
1   Jan 30 2016 12:00AM 2016-01-30  
2   Aug 9 2015 12:00AM  2015-08-09  
3   Aug 9 2015 12:00AM  2015-08-09