【问题标题】:Convert seconds to days, hours, minutes in Bigquery在 Bigquery 中将秒转换为天、小时、分钟
【发布时间】:2021-02-07 12:37:40
【问题描述】:

我在 Bigquery 中转换秒时遇到问题,是否有任何函数可以在 Bigquery 中将秒转换为小时:分钟:秒格式?我已经尝试过TIMESTAMP_SECONDS() 函数,但它也会返回一些日期,如果小时数超过 23,我将无法使用它。 例如:

秒= 100000

结果= 27:46:40

或者可能是 1 天 3 小时 46 分 40 秒

而且我还希望它采用时间戳数据类型,因此我可以对其进行升序或降序排序。

【问题讨论】:

    标签: sql google-bigquery type-conversion


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    select seconds, 
      regexp_replace(
        cast(time(ts) as string), 
        r'^\d\d', 
        cast(extract(hour from time(ts)) + 24 * unix_date(date(ts)) as string)
      ) as option1, 
      format(
        '%i day %i hour %i minute %i second', 
        unix_date(date(ts)), 
        extract(hour from time(ts)), 
        extract(minute from time(ts)), 
        extract(second from time(ts))
      ) as option2
    from `project.dataset.table`, 
    unnest([timestamp_seconds(seconds)]) ts   
    

    如果应用到您的问题中的样本数据,如

    with `project.dataset.table` AS (
      select 100000 seconds union all
      select 200000 union all
      select 300000
    )   
    

    输出是

    【讨论】:

    • 哇!太感谢了!但它不能按 asc 或 desc 排序,因为它转换为字符串,可以吗?
    • 您仍然需要使用您的原始文件(在本例中为seconds)来进行您需要的任何订购。显然,输出不能用于订购 - 除非你通过让所有组件都为两位数和第一个组件(选项 1 中的小时数和选项 2 中的天数)来规范化它,比如说 4 位数字 - 取决于预期的数字
    【解决方案2】:

    使用最近引入的 INTERVAL 数据类型和相应的函数 - 这种转换变得更加容易

    select seconds, 
      make_interval(second => seconds) result,
      justify_interval(make_interval(second => seconds)) normalized_result
    from `project.dataset.table`
    

    输出类似

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2017-05-10
      • 1970-01-01
      • 2012-09-27
      相关资源
      最近更新 更多