Oracle中使用LEVEL、CONNECT BY的SQL如何转换为Snowflake可运行语句
Oracle CONNECT BY 拆分字符串语句转Snowflake实现
原SQL逻辑说明
原Oracle语句的作用是按逗号拆分指定字符串,逐行返回每个拆分后的元素,以及元素对应的顺序位置(level值从1开始递增)。
转换后的Snowflake语句
SELECT INDEX AS level, VALUE AS COL1 FROM TABLE(SPLIT_TO_TABLE('AAAA,BBBB,CCCC', ',')) -- 如果原逻辑需要跳过拆分后的空值(比如连续逗号场景),可以加下一行过滤条件 -- WHERE VALUE != '' ;
语法说明
- Snowflake提供了内置表函数
SPLIT_TO_TABLE专门处理分隔字符串拆分行的需求,不需要像Oracle一样用递归层级查询实现,执行效率更高。 - 函数返回的
INDEX字段为元素的顺序编号,从1开始,完全等价于原SQL的level值。 - 函数返回的
VALUE字段为对应位置的拆分元素,等价于原SQL的regexp_substr返回结果。 - 如果原业务场景存在连续逗号的情况,原Oracle的
regexp_substr('AAAA,BBBB,CCCC','[^,]+',1,level)写法会跳过空值,如需对齐该逻辑,可以追加WHERE VALUE != ''过滤条件。
内容的提问来源于stack exchange,提问作者Nid
相关产品推荐
相关产品推荐

