删除大查询中时间戳列中的尾随时区 (UTC)

Remove the trailing time zone(UTC) in timestamp column in big query

提问人:jay 提问时间:9/19/2023 最后编辑:jay 更新时间:9/20/2023 访问量:78

问:

2023 年 9 月 14 日 @ 13:08:53.588 (这是 Bq 列“timestamp”中的字符串格式) 我使用下面的代码将其转换为时间戳

选择 PARSE_TIMESTAMP('%b %d, %Y @ %H:%M:%E*S',时间戳) 这给了我 2023-09-14 13:08:53.587000 UTC。

但是我想删除尾随时区(在本例中为 UTC),因为它是错误的。你能指导我吗?

日期时间 google-cloud-platform 时间 google-bigquery

评论


答:

1赞 joe 9/20/2023 #1

听起来您可能只想使用数据类型和函数。 根据定义,BQ 是 UTC。DATETIMEPARSE_DATETIMETIMESTAMP

以下是两者的一些示例,并在时区之间进行转换。两者都接受时区参数,但执行不同的事情。

  • DATETIME('2008-12-25 05:30:00', 'America/Los_Angeles')转换 UTC LA
  • TIMESTAMP('2008-12-25 05:30:00', 'America/Los_Angeles')转换 LA UTC
WITH test_data AS (
  SELECT 'Sep 14, 2023 @ 13:08:53.588' as test_col
)

SELECT
  PARSE_TIMESTAMP('%b %d, %Y @ %H:%M:%E*S', test_col) AS utc_timestamp, -- assumes string input is already in UTC
  PARSE_DATETIME('%b %d, %Y @ %H:%M:%E*S', test_col) AS test_datetime, -- not timezone aware
  
  TIMESTAMP(
    PARSE_DATETIME('%b %d, %Y @ %H:%M:%E*S', test_col),
    'Australia/Brisbane'
  ) AS utc_from_brisbane_timestamp, -- input is in Brisbane time, convert to UTC using the TIMESTAMP function and timezone argument

  DATETIME(
    PARSE_TIMESTAMP('%b %d, %Y @ %H:%M:%E*S', test_col),
    'Australia/Brisbane'
  ) AS brisbane_from_utc_datetime -- input is in UTC, convert to Brisbane using the DATETIME function and timezone argument

FROM test_data