【问题标题】:Bigquery convert ''Jan 30 2016 12:00AM" to dateBigquery 将“2016 年 1 月 30 日上午 12:00”转换为日期
【发布时间】:2020-09-26 23:43:01
【问题描述】:

我正在尝试将字符串转换为 Bigquery 中的时间戳。问题其实很简单,怎么把Jan 30 2016 12:00AM或者Aug 9 2015 12:00AM这个字符串转换成日期?

我曾尝试参考 Bigquery 文档,但它似乎不起作用: (https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#parse_date) select PARSE_DATE('%b %e %E4Y', 'Jan 30 2016 12:00AM') select PARSE_DATE('%b %e %E4Y', 'Aug 9 2015 12:00AM')

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    SELECT DATE(PARSE_TIMESTAMP('%b %e %Y %R%p', ts))   
    

    您可以使用虚拟数据对其进行测试,如下例所示

    #standardSQL
    WITH `project.dataset.table` AS (
      SELECT 'Jan 30 2016 12:00AM' ts UNION ALL
      SELECT 'Aug  9 2015 12:00AM' UNION ALL
      SELECT 'Aug 9 2015 12:00AM'
    )
    SELECT ts, DATE(PARSE_TIMESTAMP('%b %e %Y %R%p', ts)) date_from_ts
    FROM `project.dataset.table`   
    

    结果

    Row ts                  date_from_ts     
    1   Jan 30 2016 12:00AM 2016-01-30   
    2   Aug 9 2015 12:00AM  2015-08-09   
    3   Aug 9 2015 12:00AM  2015-08-09   
    

    【讨论】:

      【解决方案2】:

      您的输入字符串实际上是一个时间戳,而不是日期,因为它最后有一个时间组件。所以,考虑改用PARSE_TIMESTAMP

      SELECT PARSE_TIMESTAMP('%b %e %E4Y %I:%M%p', 'Jan 30 2016 12:00AM') AS ts_out
      FROM yourTable;
      

      这将根据输入字符串返回一个时间戳。如果你真的想要一个日期,你可以将上面的内容转换为日期,或者你可以在字符串输入上使用 LEFT 来限制只有日期部分:

      SELECT PARSE_DATE('%b %e %E4Y', LEFT('Jan 30 2016 12:00AM', 11)) AS ts_out
      FROM yourTable;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2021-07-13
        相关资源
        最近更新 更多