计算单词中元音的数量,并使用Oracle中的SQL生成报告摘要

时间:2013-12-27 15:33:21

标签: sql oracle

我需要计算Word中的元音数量。 是否可以在SQL中执行此操作?我可以使用函数(PL / SQL)轻松实现它。

但是我希望它能在SQL中完成!

我不清楚如何开始。 为了提高我的要求,它不仅仅是元音。只计算给出的任何字母表列表。还要显示出现次数。

示例STACKOVERFLOW

A 1
E 1
I 0
O 2
U 0

主持人注意:请注意,您建议的可能重复的链接只计算字母数。为了生成报告,这种方法无济于事!如果您愿意,请重新评估。谢谢!

2 个答案:

答案 0 :(得分:2)

这是一个解决方案:

with vowels as (
      select 'a' as c from dual union all
      select 'e' as c from dual union all
      select 'i' as c from dual union all
      select 'o' as c from dual union all
      select 'u' as c from dual
     )
select vowels.c,
       sum(length(replace(lower(val), vowels.c, 'xx')) - length(val))
from (select 'StackOverflow' as val from dual) t cross join
     vowels
group by vowels.c
order by vowels.c;

通过查看字符串的长度来管理计​​数。每个元音由两个字符替换,每次元音出现时,字符串的总长度增加一。

答案 1 :(得分:0)

SELECT vowel_list.chr,
  COUNT(my_string.chr)
FROM
  (SELECT UPPER(SUBSTR('STACKOVERFLOW',level,1)) AS chr
  FROM dual
    CONNECT BY level <=LENGTH('STACKOVERFLOW')
  ) my_string,
  (SELECT UPPER(SUBSTR('AEIOU',level,1)) AS chr
  FROM dual
    CONNECT BY level <=LENGTH('AEIOU')
  ) vowel_list
WHERE vowel_list.chr = my_string.chr(+)
GROUP BY vowel_list.chr
ORDER BY 1;

CONNECT BY level <= n生成n个虚拟行,其级别为1,2 ... n

SUBSTR()一次提取一个字符,最后将该字拆分为列。

使用元音单词表进行外连接,你就完成了!