我从另一篇文章中得到了以下查询,但似乎它不适用于单个字符。
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;
答案 0 :(得分: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;
您评论过:
但我的实际要求是,单行可能有也可能没有单个单词,或单个字符,也包含数字,空格等,例如:'这是一个数字333
请始终将所有信息都放在问题中。
您似乎希望拆分换行符(回车符或回车符/换行符)
在这种情况下,您希望将某些内容分成 其中一个字符。我在这里使用了所有控制字符,因为我很懒,但它适用于您提供的数据。如果你有一些贝尔字符,这将不起作用,你必须更具体。
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;
答案 1 :(得分: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;