计算字符串中的单词长度

时间:2014-03-31 14:28:45

标签: sql regex oracle

我正在使用Oracle正则表达式来提取字符串中每个单词的第一个字母。结果在单个单元格中返回,空格表示硬断点。这是一个例子......

输入:

'我希望有些善良的人 浏览堆栈溢出
可以帮助我'

输出:

ihtskp bso chm

我接下来要做的是计算输出中每个“单词”的长度,如下所示:

6 3 3

或者,原始字符串每行中的单词计数是可以接受的,因为它会产生相同的结果。

谢谢!

2 个答案:

答案 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