Snowflake cloud data platform 雪花-将字符串转换为秒

Snowflake cloud data platform 雪花-将字符串转换为秒,snowflake-cloud-data-platform,datetime-conversion,Snowflake Cloud Data Platform,Datetime Conversion,我得到了以下格式的几个字段的API响应,我想在加载到snowflake目标表时将它们转换为秒数。是否有可能使用雪花内置功能进行转换?否则,请将源数据转换为所需格式 API response "field1":"13 Days 1 Hour 51 Minutes", "field2":"11 Hours 24 Minutes" I want above response to be converted into

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

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'

谢谢

这不是一个有效的代码,而是一个想法:

  • 获取输入:
    11小时24分钟
  • 介绍
    ->
    11小时24分钟
  • 选择DATEDIFF(秒, ‘2000-01-01’:日期, ‘2000-01-01’::日期+间隔‘11小时24分钟’)
    A我认为UDF最适合这一点。它将更具可读性。您可能可以在SQLUDF中实现这一点,但对于这一点,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;
            }
        }
    $$;
    
    您的格式似乎表明API正在返回JSON。只需使用标准的雪花冒号和点符号解析JSON,并将每个部分传递到UDF中

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

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

    谢谢@Lukasz。。这需要添加逗号,然后转换为秒。。然而,格雷格的UDF工作得很好。。感谢您的时间和回复。
    select TIME_STRING_TO_SECONDS('13 Days 1 Hour 51 Minutes');
    select TIME_STRING_TO_SECONDS('11 Hours 24 Minutes');
    
    select TIME_STRING_TO_SECONDS('11 Hours 24 Minutes')::int;