【问题标题】:How to convert an int to DateTime in BigQuery如何在 BigQuery 中将 int 转换为 DateTime
【发布时间】:2021-07-22 01:36:26
【问题描述】:

我有一个名为“日期”的 INT64 列,其中包含许多不同的数字,例如:“20210209”或“20200305”。我想将这些数字转换为具有以下格式的日期:MM-YYYY(因此在这些情况下为 02-2021 和 03-2020)。最终我想把每个月的所有数据加在一起。问题是 BigQuery 无法将 INT64 转换为日期,只能转换为字符串。我不确定是否应该先转换为字符串,然后再转换为日期,或者是否有更好的方法。

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    虽然转换为字符串,但日期既可以工作又非常简洁,如果行数足够多(Big Query 中可能就是这种情况),您最好使用整数数学和使用DATE(year, month, day)...

    https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date

    SELECT
      DATE(
        DIV(    20210209        , 10000),   -- Which gives 2021
        DIV(MOD(20210209, 10000),   100),   -- Which gives   02
            MOD(20210209,   100)            -- Which gives   09
      )
    

    【讨论】:

    • 感谢您的回复。我输入了 SQL 查询,但我真正需要的是删除日期,以便按月求和。用这种方法可以吗?
    • @CIHAnalytics - 替换计算的日期部分,并始终使用 01 代替。所以,你总是得到这个月的 1sf。就像一小时用一小时的第一个时刻表示,或者如果一天用第一个时刻表示一天,则使用该月的第一个时刻表示您的月份。
    【解决方案2】:

    另一种选择

    select date, 
      regexp_replace('' || date, r'(\d{4})(\d{2})(\d{2})', r'\2-\1') as MM_YYYY
    from your_table    
    

    如果应用于您问题中的样本数据 - 输出是

    另一种选择

    select date, 
      format_date('%m-%Y', parse_date('%Y%m%d', '' || date)) as MM_YYYY
    from your_table
    

    输出相同

    【讨论】:

      【解决方案3】:

      您可以将值转换为字符串并使用parse_date()

      select parse_date('%Y%m%d', cast(20210209 as string))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-11
        • 2020-07-18
        • 2011-01-22
        • 1970-01-01
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多