我需要计算Word中的元音数量。 是否可以在SQL中执行此操作?我可以使用函数(PL / SQL)轻松实现它。
但是我希望它能在SQL中完成!
我不清楚如何开始。 为了提高我的要求,它不仅仅是元音。只计算给出的任何字母表列表。还要显示出现次数。
示例:STACKOVERFLOW
A 1
E 1
I 0
O 2
U 0
主持人注意:请注意,您建议的可能重复的链接只计算字母数。为了生成报告,这种方法无济于事!如果您愿意,请重新评估。谢谢!
答案 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()
一次提取一个字符,最后将该字拆分为列。
使用元音单词表进行外连接,你就完成了!