Snowflake中从字符串表达式提取整数并构建数组的方法
在Snowflake中提取数学表达式中的整数并构建整数数组
可以通过Snowflake的正则表达式函数直接实现需求,核心思路是用REGEXP_EXTRACT_ALL提取所有整数字符串,再转换为整数类型数组。
实现代码示例
WITH test_data AS ( SELECT '50 + 80' AS expr UNION ALL SELECT '(10 + 20) / 30' AS expr UNION ALL SELECT '40 * (50 - 60)' AS expr ) SELECT expr, ARRAY_TRANSFORM(REGEXP_EXTRACT_ALL(expr, '\\d+'), x => TRY_CAST(x AS INTEGER)) AS integer_array FROM test_data;
关键函数说明
REGEXP_EXTRACT_ALL(expr, '\\d+'):匹配表达式中所有连续的数字序列,直接返回字符串数组。比如对'(10 + 20) / 30',会得到['10','20','30']。ARRAY_TRANSFORM(..., x => TRY_CAST(x AS INTEGER)):将数组中的每个字符串元素转换为整数类型,最终得到纯整数数组。如果确认表达式中只有合法整数,也可以用CAST替代TRY_CAST,后者在遇到异常值时会返回NULL,更安全。
对比replace方案的优势
之前用replace处理后得到的是逗号分隔的字符串(比如'10,20,30'),转数组后是单元素的字符串数组['10,20,30'],而正则提取方案直接获取多元素的数字字符串数组,再转类型就能得到目标整数数组,无需额外的字符串拆分操作。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

