bigquery将“2016年1月30日12:00am”转换为日期

kg7wmglp  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(494)

我试图在bigquery中将字符串转换为时间戳。问题很简单,如何转换这个字符串 Jan 30 2016 12:00AM 或者 Aug 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')

gudnpqoy

gudnpqoy1#

您的输入字符串实际上是一个时间戳,而不是日期,因为它的末尾有一个时间组件。所以,考虑使用 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;
epfja78i

epfja78i2#

下面是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

相关问题