Snowflake中用REGEXP_SUBSTR拆分数组值生成多列的问题求助
解决Snowflake中从字符串数组提取数值列的问题
问题分析
你当前的正则表达式-?\d+\.+\d+存在错误:\.+会匹配一个或多个连续小数点,但你的数据里每个数值只有单个小数点,导致匹配逻辑不符合预期。另外在Snowflake的SQL字符串中,反斜杠需要转义(写成\\),否则无法正确识别正则元字符。
修正后的正则方案
使用-?\\d+\\.\\d+作为正则表达式,其中:
-?:匹配可选的负号\\d+:匹配一个或多个整数位数字\\.:匹配单个小数点\\d+:匹配一个或多个小数位数字
完整SQL示例(假设你的表名为your_table,目标列名为array_str_col):
SELECT REGEXP_SUBSTR(array_str_col, '-?\\d+\\.\\d+', 1, 1)::FLOAT AS col1, REGEXP_SUBSTR(array_str_col, '-?\\d+\\.\\d+', 1, 2)::FLOAT AS col2, REGEXP_SUBSTR(array_str_col, '-?\\d+\\.\\d+', 1, 3)::FLOAT AS col3 FROM your_table;
添加::FLOAT可以将提取出的字符串转换为数值类型,方便后续计算。
更高效的替代方案(如果列是真正的ARRAY类型)
如果你的列是Snowflake原生的ARRAY类型(而非字符串形式的数组),直接使用ARRAY_GET函数提取元素更高效:
SELECT ARRAY_GET(array_col, 0) AS col1, ARRAY_GET(array_col, 1) AS col2, ARRAY_GET(array_col, 2) AS col3 FROM your_table;
内容的提问来源于stack exchange,提问作者gjoe
相关产品推荐
相关产品推荐

