Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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)中带有3个分隔符的文本拆分为多行和多列?_Sql_Split_Delimiter - Fatal编程技术网

如何将SQL(Oracle)中带有3个分隔符的文本拆分为多行和多列?

如何将SQL(Oracle)中带有3个分隔符的文本拆分为多行和多列?,sql,split,delimiter,Sql,Split,Delimiter,我需要将像“Aa:One | Bb:Two,Three,Four | Cc:Five,Six”这样的文本拆分为行和列,以使结果看起来像- Col1 Col2 AA-1 BB2 Bb三 Bb四 Cc五 抄送六 我试过使用 SELECT REGEXP_SUBSTR (str, '[^:]+', 1, 1) AS COL1 ,REGEXP_SUBSTR (str, '[^:]+', 1, 2) AS COL2 FROM (SELECT REGEXP_SUBSTR('Aa:One

我需要将像“Aa:One | Bb:Two,Three,Four | Cc:Five,Six”这样的文本拆分为行和列,以使结果看起来像-

Col1 Col2

AA-1

BB2

Bb三

Bb四

Cc五

抄送六

我试过使用

SELECT REGEXP_SUBSTR (str, '[^:]+', 1, 1)    AS COL1
      ,REGEXP_SUBSTR (str, '[^:]+', 1, 2)    AS COL2
FROM (SELECT REGEXP_SUBSTR('Aa:One|Bb:Two,Three,Four|Cc:Five,Six', '[^|]+', 1, LEVEL) AS str
      FROM DUAL
      CONNECT BY INSTR('Aa:One|Bb:Two,Three,Four|Cc:Five,Six', '|', 1, LEVEL - 1) > 0
      )
但我只能创造

Col1 Col2

Aa-1

Bb二,三,四

抄送五,六

我不知道如何在Col2中使用逗号(,)将它进一步拆分为与Col1值的第一次出现相对应的行

在这方面的任何帮助都将不胜感激


提前感谢!:-)

我只是为
SQL Server
做了这件事。使用
ORACLE
中的
函数
,您可以从
ORACLE
获得相同的结果

DECLARE @Id VARCHAR(100)='Aa:One|Bb:Two,Three,Four|Cc:Five,Six'

SELECT LEFT(items, CHARINDEX(':',items)-1)Col1
    ,RIGHT(items, CHARINDEX(':',REVERSE(items))-1)Col2 
INTO #Temp
FROM dbo.Split(@Id,'|')

SELECT p.Col1, colortable.items as Col2
FROM #Temp p 
    cross apply split(p.Col2, ',') as colortable

DROP TABLE #Temp
我的结果是:

Col1    Col2
Aa      One
Bb      Two
Bb      Three
Bb      Four
Cc      Five
Cc      Six

我使用临时表逻辑“WITH t AS()”创建了带有以下查询的结果集-

WITH t AS (
SELECT TRIM(REGEXP_SUBSTR (str, '[^:]+', 1, 1))    AS tempCol1
  ,TRIM(REGEXP_SUBSTR (str, '[^:]+', 1, 2))    AS tempCol2
FROM (
  SELECT TRIM(REGEXP_SUBSTR('Aa:One|Bb:Two,Three,Four|Cc:Five,Six|Dd:Seven, Eight, Nine, Ten', '[^|]+', 1, LEVEL)) str
  FROM DUAL
  CONNECT BY INSTR('Aa:One|Bb:Two,Three,Four|Cc:Five,Six|Dd:Seven, Eight, Nine, Ten', '|', 1, LEVEL - 1) > 0)
)

SELECT DISTINCT(Col1)
   , Col2
FROM (
   SELECT t.tempCol1 AS Col1
     ,TRIM(REGEXP_SUBSTR(t.tempCol2, '[^,]+', 1, LEVEL)) Col2
   FROM t
   CONNECT BY INSTR(t.tempCol2, ',', 1, LEVEL - 1) > 0)
ORDER BY Col1, Col2 
显然,我必须对Col1使用'Distinct',因为查询将获取重复的行


谢谢大家的帮助!:)

你的逻辑帮助我得到了想要的结果。非常感谢!:)