0

我从另一篇文章中得到了以下查询,但似乎不适用于单个字符。

SELECT regexp_substr('abc
def
ghi', '.+[[:alpha:]]', 1 ,level)
FROM dual
     CONNECT BY regexp_substr('abc
def
ghi', '.+[[:alpha:]]', 1 ,level) IS NOT NULL;

输出

abc
def
ghi

当我为单个字符尝试此操作时,它无法按预期工作。

 SELECT regexp_substr('a
b
c', '.+[[:alpha:]]', 1 ,level)
FROM dual
     CONNECT BY regexp_substr('a
b
c', '.+[[:alpha:]]', 1 ,level) IS NOT NULL;
4

2 回答 2

0

这是因为你的正则表达式。将其更改为查找连续的字母字符:

 select regexp_substr('abc
 def
 ghi', '[[:alpha:]]+', 1 ,level)
   from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null

它也适用于单个字符:

select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
     connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;

你评论过:

但我的实际要求是,单行可能有也可能没有单个单词或单个字符,其中还包含数字、空格等,例如:'this is a number333

请始终将所有信息都放在问题中。

您似乎希望在换行符上拆分(回车或回车/换行)

在这种情况下,您希望在某些不是这些字符之一的地方进行拆分。我在这里使用了所有控制字符,因为我很懒,但它适用于您提供的数据。如果您有一些 Bell 字符,这将不起作用,您必须更具体。

with the_data as ( 
select 'a
b
c' as dat
  from dual
       )
 select regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level)
  from the_data
connect by regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level) is not null;
于 2013-06-28T08:33:04.710 回答
0

试试这个:

SELECT regexp_substr('a
b
c', '[[:alpha:]]', 1 ,level)
FROM dual
CONNECT BY regexp_substr('a
b
c', '[[:alpha:]]', 1 ,level) IS NOT NULL;
于 2013-06-28T08:33:40.500 回答