CAST as TIMESTAMP无法用于某些字符串格式

时间:2019-06-14 11:47:58

标签: sql google-bigquery

我在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

1 个答案:

答案 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