如何使用REGEXP\u SUBSTR返回所有结果?

如何使用REGEXP\u SUBSTR返回所有结果?,regex,oracle,Regex,Oracle,我需要返回四个结果,只显示三个。我怎么能这样做 查询: SELECT REGEXP_SUBSTR(lines, '[0-9]{1,3}', 1, 1,'m') from ( SELECT '111 - first line' lines FROM dual UNION SELECT '222 - second line' FROM dual UNION SELECT '333 - third line

我需要返回四个结果,只显示三个。我怎么能这样做

查询:

SELECT REGEXP_SUBSTR(lines, '[0-9]{1,3}', 1, 1,'m')
from 
(
      SELECT '111 - first line' lines FROM dual
      UNION
      SELECT '222 - second line'      FROM dual
      UNION
      SELECT '333 - third  line
              444 - fourth line' FROM dual
)
它返回这个:

111
222
333
我想要这个:

111
222
333
444

这可能吗?

首先让我们制作一些数据:

CREATE TABLE some_table (some_data VARCHAR2(200))
/
INSERT INTO some_table VALUES ('111 - first line')
/
INSERT INTO some_table VALUES ('222 - second line')
/
INSERT INTO some_table VALUES ('333 - third  line
444 - fourth line')
/
INSERT INTO some_table VALUES ('555 - fifth  line
                         666 - some ugly line')
/
INSERT INTO some_table VALUES ('123 - meh meh
                         321 - one more
                         678 - and more
                         986 - and more :)')
/
那么让我们进行一个查询:

    SELECT DISTINCT TRIM(REGEXP_SUBSTR(some_data,'[^'||CHR(10)||']+', 1, level)) 
      FROM some_table
   CONNECT BY REGEXP_SUBSTR(some_data, '[^'||CHR(10)||']+', 1, level) IS NOT NULL;
您可以轻松地实现对此的查询。我有点懒于思考,所以我放置了一个DISTINCT来删除重复的行。在正确的代码中,您不应该使用它

您的数据如下所示:

333 - third  line
678 - and more
986 - and more :)
321 - one more
555 - fifth  line
444 - fourth line
666 - some ugly line
222 - second line
123 - meh meh
111 - first line

我认为是这样。。。不因为在上次选择中,同一列中有333和444。您需要规范化您的数据。是的,使用“连接方式”。我试着举个例子。我想可以从9i开始。