我正在使用Oracle正则表达式来提取字符串中每个单词的第一个字母。结果在单个单元格中返回,空格表示硬断点。这是一个例子......
输入:
'我希望有些善良的人
浏览堆栈溢出
可以帮助我'
输出:
ihtskp bso chm
我接下来要做的是计算输出中每个“单词”的长度,如下所示:
6 3 3
或者,原始字符串每行中的单词计数是可以接受的,因为它会产生相同的结果。
谢谢!
答案 0 :(得分:2)
计算空格数并添加一个:
select (length(your_col) - length(replace(your_col, ' '))+1) from your_table;
它会给你每行的单词数。从那里你可以使用listagg函数在一行上获得所有计数:
select LISTAGG(cnt,' ') within group (order by null) from (
select (length(a)-length(replace(a,' '))+1) cnt from (
select 'apa bpa bv' a from dual
union all
select 'n bb gg' a from dual
union all
select 'ff ff rr gg' a from dual))
group by null;
如果字符串包含换行符,或者它们已经拆分,也许您还需要拆分字符串?
答案 1 :(得分:0)
我试图编辑我原来的帖子,但它还没有出现,但我找到了解决问题的方法。我只是决定将这些单词分成几行,因为我知道如何对行计数字符,然后使用listagg将字符计数重组为单个单元格:
with my_string as (
select regexp_substr (words,'[0-9]+|[a-z]+|[A-Z]+',1,lvl) parsed
from (
select words, level lvl
from letters connect by level <= length(words) - length(replace(words,' ')) + 1)
)
select listagg(length(parsed),' ') within group (order by parsed) word_count
from my_string