【问题标题】:Unable to Parse a date string to timestamp in BigQuery Standard SQL无法在 BigQuery 标准 SQL 中将日期字符串解析为时间戳
【发布时间】:2020-08-05 07:45:30
【问题描述】:

我的数据集中有日期字符串列,该日期字符串列的日期值格式如下所示

某些日期的格式为:2020-04-22 和 一些日期的格式为:04/22/2020

请建议如何将这些日期值解析为时间戳格式:2020-04-22 00:00:00 UTC

谢谢!

【问题讨论】:

    标签: sql date select google-bigquery


    【解决方案1】:

    您需要标准化两个日期。 尝试使用:

    SELECT
       COALESCE(SAFE.PARSE_DATE('%F', your_date_field), SAFE.PARSE_DATE('%m/%d/%Y', your_date_field)) AS your_new_date_field
    FROM ...
    
    

    【讨论】:

      【解决方案2】:

      如果所有字符串都严格符合一种格式或另一种格式,则可以进行条件逻辑:

      PARSE_TIMESTAMP(
          CASE 
              WHEN REGEXP_CONTAINS(mydate, r"^\d{4}-\d{2}-\d{2}$" THEN "%F"
              WHEN REGEXP_CONTAINS(mydate, r"^\d{2}/\d{2}/\d{4}$" THEN "%m/%d/%Y"
          END,
          mydate
      )
      

      您可能希望使用SAFE.PARSE_TIMESTAMP() 而不是PARSE_TIMESTAMP() 来防止不匹配格式的转换失败。

      【讨论】:

      • 非常感谢 GMB 的回复!它正在与逻辑上的一个小变化一起工作。缺少右括号。无论如何,它确实有帮助。 PARSE_TIMESTAMP(当 REGEXP_CONTAINS(mydate, r"^\d{4}-\d{2}-\d{2}$" )THEN "%F" WHEN REGEXP_CONTAINS(mydate, r"^\d{2}/ \d{2}/\d{4}$" ) THEN "%m/%d/%Y" END, mydate )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2011-01-25
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多