Bigquery转换“ 2016年1月30日12:00 AM”为日期

时间:2020-06-08 03:57:46

标签: sql google-bigquery

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

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

2 个答案:

答案 0 :(得分:1)

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

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

这将基于输入字符串返回时间戳。如果您确实想要日期,则可以将上面的内容强制转换为日期,或者可以仅在字符串输入上使用LEFT来限制日期部分:

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

答案 1 :(得分:0)

以下是BigQuery标准SQL

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

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

#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`   

有结果

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   
相关问题