我在BigQuery表中有一个字段,该字段是STRING,但实际上是时间戳,格式为“ 2019-06-14T11:31:07”。因此,我正在使用CAST(sign_up_date AS TIMESTAMP)转换为可用的TIMESTAMP。
这在旧版SQL中非常有效,但是在标准SQL中,当STRING的格式为“ 2019-06-14T09:09”(确切的时间,缺少“:00”)或“ 2019-05-25T05:31:22.7263555”(有时是十进制秒)。
关于如何使其在标准SQL中工作的任何想法?显然,我可以只使用Legacy SQL,但是我想用Standard编写,因为在该函数中还有其他更好的功能。
谢谢
Benji
答案 0 :(得分:3)
以下是BigQuery标准SQL的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT "2019-06-14T11:31:07" sign_up_date UNION ALL
SELECT "2019-05-25T05:31:22.7263555" UNION ALL
SELECT "2019-06-14T09:09"
)
SELECT sign_up_date,
COALESCE(
SAFE.PARSE_TIMESTAMP('%FT%R', sign_up_date),
SAFE.PARSE_TIMESTAMP('%FT%R:%E*S', sign_up_date)
) AS sign_up_date_as_timestamp
FROM `project.dataset.table`
有结果
Row sign_up_date sign_up_date_as_timestamp
1 2019-06-14T11:31:07 2019-06-14 11:31:07 UTC
2 2019-05-25T05:31:22.7263555 2019-05-25 05:31:22.726355 UTC
3 2019-06-14T09:09 2019-06-14 09:09:00 UTC
如您所见,这将涵盖您在问题中提出的所有三个模式。
如果您会发现更多-您可以在COALESCE中添加相应的SAFE.PARSE_TIMESTAMP