【问题标题】:Snowflake - convert string to seconds雪花 - 将字符串转换为秒
【发布时间】:2021-03-19 00:41:42
【问题描述】:

我收到以下格式的几个字段的 API 响应,我想在加载到雪花目标表时将它们转换为秒。是否有任何可能性可以使用任何雪花内置功能进行转换?否则无论如何要将源数据转换为所需的格式。

API response
"field1":"13 Days 1 Hour 51 Minutes",
"field2":"11 Hours 24 Minutes"
  
I want above response to be converted into seconds
field1 to --> '1129860'
field2 to --> '41040'

谢谢

【问题讨论】:

    标签: snowflake-cloud-data-platform datetime-conversion


    【解决方案1】:

    认为 UDF 最适合此问题。它将更具可读性。您可能可以在 SQL UDF 中执行此操作,但对于此 JavaScript 也可以正常工作。

    create or replace function TIME_STRING_TO_SECONDS(TIME_STRING string)
    returns float
    language javascript
    as
    $$
        var s = TIME_STRING.split(" ");
        var seconds = 0;
        for (var i = 1; i <= s.length; i = i + 2) {
            seconds += getSeconds(s[i], s[i-1]);
        }
        return seconds;
    
        function getSeconds(unit, sec) {
            switch (unit.toUpperCase()) {
                case 'DAYS':
                    return 86400 * sec;
                case "DAY":
                    return 86400 * sec;
                case 'HOURS':
                    return 3600 * sec;
                case "HOUR":
                    return 3600 * sec;
                case "MINUTES":
                    return 60 * sec;
                case "MINUTE":
                    return 60 * sec;
                default:
                    return sec;
            }
        }
    $$;
    

    然后您可以像这样运行语句:

    select TIME_STRING_TO_SECONDS('13 Days 1 Hour 51 Minutes');
    select TIME_STRING_TO_SECONDS('11 Hours 24 Minutes');
    

    您的格式似乎表明 API 正在返回 JSON。只需使用标准 Snowflake 冒号和点表示法解析 JSON,并将每个部分传递到 UDF。

    请记住,JavaScript 没有整数类型,因此如果您需要整数类型,您可以在 SQL 中显式执行:

    select TIME_STRING_TO_SECONDS('11 Hours 24 Minutes')::int;
    

    【讨论】:

      【解决方案2】:

      不是一个工作代码,而是一个想法:

      1. 接受输入:11 Hours 24 Minutes
      2. 介绍, -> 11 Hours, 24 Minutes
      3. DATEDIFFINTERVAL
      选择 DATEDIFF(第二个, '2000-01-01':: 日期, '2000-01-01'::DATE + INTERVAL '11 小时 24 分钟')

      【讨论】:

      • 谢谢@Lukasz.. 这需要添加逗号,然后转换为秒.. 但是 Greg 的 UDF 工作正常.. 感谢您的时间和回复。
      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多