能否用Oracle SQL实现类似Pandas explode的多ID拆分功能?
用Oracle SQL实现类似Pandas explode的拆分功能
完全可以用Oracle SQL实现,不需要依赖Python。你的原有代码只提取了首个ID,是因为没处理多行拆分逻辑,下面是可以直接用的解决方案:
实现代码
SELECT DISTINCT TRIM(t.NAME) AS NAME, TRIM(REGEXP_SUBSTR(t.P_ID, '[Ll]\d{7}', 1, LEVEL)) AS P_ID FROM test_table t CONNECT BY LEVEL <= REGEXP_COUNT(t.P_ID, '[Ll]\d{7}') AND PRIOR TRIM(t.NAME) = TRIM(t.NAME) AND PRIOR SYS_GUID() IS NOT NULL ORDER BY NAME, P_ID;
代码说明
[Ll]\d{7}:精准匹配你需要的ID格式——以L/l开头,后跟7位数字(共8位),自动忽略所有分隔符(;、,、/)和无关括号、文字。REGEXP_COUNT:统计每个P_ID字段里符合格式的ID数量,控制拆分的行数。REGEXP_SUBSTR + LEVEL:通过LEVEL循环提取第1、2…N个符合条件的ID,实现一行拆多行。CONNECT BY里的条件:确保同一个NAME下的拆分行属于同一组,同时避免产生循环冗余数据。DISTINCT:自动去除可能存在的重复ID。
这段代码可以直接处理你给出的所有测试数据,输出和你期望完全一致的结果。
内容的提问来源于stack exchange,提问作者CodeoDE
相关产品推荐
相关产品推荐

