如何在 Google Big Query 中分隔字符串并将其转换为日期

问题描述 投票:0回答:1

我有一个充满时间戳的列,标题为“DateTime”,实际上是字符串数据类型。虽然大多数条目采用第一种格式:

01012023050000AM
(表示美国东部时间 2023 年 1 月 1 日凌晨 5 点),但部分条目采用第二种格式:
2023-01-01 05:00:00+00
(也是美国东部时间 2023 年 1 月 1 日凌晨 5 点)。

我正在尝试将此字符串数据转换为日期数据,以便我可以找到 2023 年每个月的第一天和最后一天之间另一列的值之间的差异。我尝试使用

PARSE_TIMESTAMP("%c", DateTime)
但在某些情况下出现错误日期,例如
Failed to parse input string "09042023050000AM

时间戳是在每天凌晨 5 点获取的,因此不需要时-分-秒部分,并且第二种格式下的大多数时间戳可以追溯到更早的时间。我想知道如何摆脱“050000AM”以及如何在转换为日期之前排除第二种格式“2023-01-01 05:00:00+00”的任何日期?

抱歉,我是 SQL 和 Google Big Query 的新手,因此非常感谢您的帮助!

sql google-bigquery
1个回答
0
投票

如果只有两种格式,您可以使用

coalesce()
+
safe.parse_timestamp()
,如下例所示:

select
  DateTime,
  coalesce(
    safe.parse_timestamp('%Y-%m-%d %H:%M:%S%z', DateTime),
    safe.parse_timestamp('%m%d%Y%H%M%S%p', DateTime)
  ) as my_new_datetime

将返回:

| DateTime               | my_new_datetime         |
|------------------------|-------------------------|
| 01012023050000AM       | 2023-01-01 05:00:00 UTC |
| 2023-01-01 05:00:00+00 | 2023-01-01 05:00:00 UTC |

使用此组合,您将确保:

  • 如果添加新格式,它将返回
    null
    而不是错误
  • 当添加新格式时,如果有的话,您只需要在合并()中添加一个新行
© www.soinside.com 2019 - 2024. All rights reserved.