2016-10-11 173 views
0

我有一個這樣的表。返回每行記錄的計數SQL

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 

在此先感謝。

回答

0

您可以通過用空白替換P並從原始字符串中減去替換字符串的長度來計算出現次數。

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

編輯:每個操作的評論,計數爲空字符串替換字符當兩個Pp,使用upperlower

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

這個查詢工作正常,只有計數大寫'P'。如果我給'P'的多種形式,如包括資本和小兩者。我想把每一行的'P'(如大寫和小寫)都算在內。那麼邏輯是什麼。 –

+0

看到編輯... –

+0

在此先感謝@vkp –

2

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

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

我不知道這個功能。謝謝。我看它是在oracle 11g中引入的。 –

+0

我已經嘗試了很多使用regexp_count,但它不在oracle 10g中工作。 –