Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 9i中拆分逗号分隔的值_Sql_Oracle_Oracle9i - Fatal编程技术网

Sql 在Oracle 9i中拆分逗号分隔的值

Sql 在Oracle 9i中拆分逗号分隔的值,sql,oracle,oracle9i,Sql,Oracle,Oracle9i,在Oracle中,我有称为OrderID的列 orderids 111,222,333 444,55,66 77,77 如何获得输出 Orderid 111 222 333 444 55 66 77 77 试试这个: WITH TT AS (SELECT orderid COL1 FROM orders) SELECT substr(str, instr(str, ',', 1, LEVEL) + 1, ins

在Oracle中,我有称为OrderID的列

orderids
111,222,333
444,55,66
77,77
如何获得输出

Orderid
111
222
333
444
55
66
77
77
试试这个:

 WITH TT AS
 (SELECT orderid COL1 FROM orders)
 SELECT substr(str,
                   instr(str, ',', 1, LEVEL) + 1,
                   instr(str, ',', 1, LEVEL + 1) -
                   instr(str, ',', 1, LEVEL) - 1) COL1
     FROM   (SELECT rownum AS r,
                    ','|| COL1||',' AS STR
               FROM   TT )
     CONNECT BY PRIOR r = r
         AND    instr(str, ',', 1, LEVEL + 1) > 0
         AND    PRIOR dbms_random.STRING('p', 10) IS NOT NULL
;
见此

这是一种方法:

with order_table as (
  select '111,222,333' as orderids from dual
  union all select '444,55,66' from dual
  union all select '77,77' from dual
)
select substr(orderids, instr(orderids, ',', 1, lvl) + 1, instr(orderids, ',', 1, lvl + 1) - instr(orderids, ',', 1, lvl) - 1) orderid 
from
  ( select ',' || orderids || ',' as orderids from order_table ),
  ( select level as lvl from dual connect by level <= 100 )
where lvl <= length(orderids) - length(replace(orderids, ',')) - 1;

只需删除WITH子句,并将order_表替换为实际表。

这也可能对您有所帮助

with t(orderid) as 
(
SELECT '111,222,333' FROM dual
UNION
SELECT '444,55,66' FROM dual
UNION
SELECT '177,77' FROM dual
)
SELECT trim(x.COLUMN_VALUE.EXTRACT('e/text()')) cols 
FROM t t, TABLE (xmlsequence(XMLTYPE('<e><e>' || REPLACE(t.orderid,',','</e><e>')|| '</e></e>').EXTRACT('e/e'))) x;

这是我正在寻找的实际查询。

以后,请花更多时间格式化您的问题。因为您没有格式化预期和实际输出,所以所有数字都在同一行,并且这个问题很容易引起误解。这一次我已经解决了。如果你在谷歌上搜索oracle,将字符串拆分成行,你会找到你要查找的内容,例如,Nope@Codo,正则表达式是在10g中引入的,这意味着通常的方法不起作用,这就是我没有关闭的原因。好的观点。但是它也可以用INSTR和SUBSTR来完成。是的,还有。我希望每个单词都在单独的行中
instr(','||NVL('972414AQ,972414AQ',I.CUSIP)||',', ','||I.CUSIP||',') > 0