sql - 如何使用 SQL ORACLE 解析列值
问题描述
我正在使用 ORACLE(版本?)。
我有一个表 mytable ,其中有一列 COL_LIST 包含由 '/' 分隔的连接值:
COL_LIST
06130/06520
06000/06100/06200/06300
使用 SQL,我想用 COL_LIST 和一个新列 COL 创建另一个表,例如:
COL COL_LIST
06130 06130/06520
06520 06130/06520
06000 06000/06100/06200/06300
06100 06000/06100/06200/06300
06200 06000/06100/06200/06300
06300 06000/06100/06200/06300
使用 :
SELECT col_list ,
REGEXP_SUBSTR( col_list , '[^/]+' , 1 , LEVEL ) AS col
FROM mytable
CONNECT BY REGEXP_SUBSTR( col_list , '[^/]+' , 1 , LEVEL ) IS NOT NULL
如果我在 MYTABLE 的 COL_LIST 中只有一个值(例如 06130/06520 ),则工作正常,但如果没有,结果不是我所期望的。
关于案件的任何提示?
解决方案
您不能这样使用connect by
:它会复制行并且不会产生您想要的结果。
从您现有的查询开始,并假设 Oracle 12c 或更高版本,您可以使用横向连接解决此问题:
select t.col_list, x.col
from mytable t
cross apply (
select regexp_substr(t.col_list , '[^/]+', 1, level) as col
from dual
connect by regexp_substr(t.col_list , '[^/]+', 1, level) is not null
) x
推荐阅读
- python - How would I loop the triangles/improve my code? (Nested triangle turtle)
- node.js - Loopback: Creating relations between models in different microservices
- python - Finding shortest sublist with sum greater than 50
- spring-webflux - Spring Cloud Contract EXPLICIT 和 WEBTESTCLIENT 测试模式
- appium - 跳过某些关键字的“捕获页面截图”
- python - 如何在条件下从数据框中选择多列和多行?
- html - flex-wrap: nowrap 与行和列
- php - 通过 axios 请求调用 php 文件已被 VUE CLI 3 中的 CORS 策略阻止
- php - php代码无法打开python脚本
- python-3.x - pypy3 在 10**10 循环时间下发生了什么