返回每行SQL中的记录数

时间:2016-10-11 19:41:59

标签: sql oracle10g

我有一张这样的桌子。

 SQL> SELECT * FROM FRUIT;

 F_NAME
 ----------
 APPLE
 PPPALEP
 APLEE
 PPAALLEEPP
 ornPpfpP    
 PPdhppPP  

上面一个是我的源表,我想要低于输出。如果我给多个形式的'P',比如包括大写和小两个。 我想从每一行只计算'P'。

OUTPUT
------
F_NAME      COUNT
------      -----
APPLE         2
PPPALEP       4
APLEE         1
PPAALLEEPP    4
ornPpfpP      4
PPdhppPP      6

提前致谢。

2 个答案:

答案 0 :(得分:2)

Oracle非常方便regexp_count()。所以:

select f_name, regexp_count(f_name, 'P') as cnt
from fruit;

答案 1 :(得分:0)

您可以通过用空格替换P并从原始字符串中减去替换字符串的长度来计算出现次数。

select f_name,length(f_name)-length(replace(f_name,'P','')) cnt
from fruit

修改:根据OP的评论,要计算Pp,请在用空字符串替换字符时使用upperlower

select f_name,length(f_name)-length(replace(upper(f_name),'P','')) cnt
from fruit