Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL(在Oracle数据库中)从具有逗号分隔值字段的单个记录创建新记录_Sql_Oracle_Cross Join_Rownum_Regexp Replace - Fatal编程技术网

如何使用SQL(在Oracle数据库中)从具有逗号分隔值字段的单个记录创建新记录

如何使用SQL(在Oracle数据库中)从具有逗号分隔值字段的单个记录创建新记录,sql,oracle,cross-join,rownum,regexp-replace,Sql,Oracle,Cross Join,Rownum,Regexp Replace,假设我在表test_tabfile中有一条记录,默认的排序字段包含逗号分隔的值: table_name schema_name default_sort ------------ ------------- -------------------------------------- Population 2017 GEOTYPE, STATE, COUNTY, ZIP, MSA, CSA 以下传统SQL脚本分离默认排序字段中的值,并创建

假设我在表test_tabfile中有一条记录,默认的排序字段包含逗号分隔的值:

table_name     schema_name     default_sort
------------   -------------   -------------------------------------- 
Population     2017            GEOTYPE, STATE, COUNTY, ZIP, MSA, CSA
以下传统SQL脚本分离默认排序字段中的值,并创建具有不同值字段、索引列的新记录。它是如何做到这一点的

我试图更直观地理解它并重写它。谢谢

SELECT schema_name AS schemaname,
       table_name AS tablename,
       REGEXP_SUBSTR (default_sort, '[^,]+', 1, rn) AS index_column
  FROM test_tabfile
       CROSS JOIN
       (    SELECT ROWNUM rn
              FROM (SELECT   MAX (LENGTH (REGEXP_REPLACE (default_sort, '[^,]+'))) + 1 mx
                      FROM test_tabfile)
        CONNECT BY LEVEL <= mx);

“连接方式”用于导航层次结构,例如

select ...
from   EMP
start with MGR is null  -- ie, the CEO
connect by prior MGR = EMPNO   -- ie, link an employee to his manager
但不久前,人们工作过,它可以用来穿越一个虚构的等级制度,通过

认识到从开始是可选的 为连接提供“始终为真”的条件 因此,我们可以采取上述行动

select ...
from   EMP
connect by 1 = 1 
你将永远“走”在等级制度中!然后我们可以将其变形为:

select rownum
from   dual
connect by 1=1
得到整数1,2,3。。。无限远。从那里,我们只需要添加一个终止条件,例如

select rownum
from   dual
connect by level <= 10
因为每次我们遍历层次结构时,“级别”都会上升

如果你有整数1,2,3,4。。。然后他们可以用来挖掘字符串,例如找到第一个字符,找到第二个字符,或者找到第一个单词,找到第二个单词等等

我在这里做了一个关于这个主题的视频


这类事情非常特定于平台。我认为按级别连接是Oracle。我将添加Oracle标记,您可以通过自己运行片段来开始理解它。i、 e.看看这个结果:从SELECT MAX LENGTH REGEXP中选择ROWNUM rn_REPLACE default_sort,[^,]+'+1 mx从test_tabfile按级别连接谢谢Nick,我会调查的。谢谢Connor。这很有帮助。
select rownum
from   dual
connect by level <= 10