我需要字符串中每個字符的數量。
實施例:給定字符串中每個字符的數量
SELECT ('aabcccdee') from dual;
結果:
a(1),b(2), c(3), d(1),e(2).
預先感謝。
我需要字符串中每個字符的數量。
實施例:給定字符串中每個字符的數量
SELECT ('aabcccdee') from dual;
結果:
a(1),b(2), c(3), d(1),e(2).
預先感謝。
您可以使用分層查詢將字符串拆分爲單個字符;這是一個使用CTE只是爲了提供您的示例值:
with t (value) as (
select 'aabcccdee' from dual
)
select substr(value, level, 1) as a_char
from t
connect by level <= length(value);
然後你可以使用聚合計算會如何次,每次出現:
with t (value) as (
select 'aabcccdee' from dual
)
select a_char, count(*) a_count
from (
select substr(value, level, 1) as a_char
from t
connect by level <= length(value)
)
group by a_char
order by a_char;
A_CH A_COUNT
---- ----------
a 2
b 1
c 3
d 1
e 2
你也可以使用listagg()
(如果你是11g或以上)聚合這些字符計數成一個字符串,如果這是你真正想要的:
with t (value) as (
select 'aabcccdee' from dual
)
select listagg(a_char || '(' || count(*) || ')', ',') within group (order by a_char)
from (
select substr(value, level, 1) as a_char
from t
connect by level <= length(value)
)
group by a_char;
LISTAGG(A_CHAR||'('||COUNT(*)||')',',')WITHINGROUP(ORDERBYA_CHAR)
-----------------------------------------------------------------
a(2),b(1),c(3),d(1),e(2)
如果你特別想這樣做,在PL/SQL - 因爲你重視我s已經在PL/SQL變量中 - 也許你可以用上下文開關做同樣的事情:
set serveroutput on
declare
l_value varchar2(30) := 'aabcccdee';
l_result varchar2(100);
begin
select listagg(a_char || '(' || count(*) || ')', ',') within group (order by a_char)
into l_result
from (
select substr(l_value, level, 1) as a_char
from dual
connect by level <= length(l_value)
)
group by a_char;
dbms_output.put_line(l_result);
end;
/
a(2),b(1),c(3),d(1),e(2)
PL/SQL procedure successfully completed.
考慮到額外需求,查看構建查詢的方式非常好。 – BriteSponge
這真棒Alex。你沒有給任何人回答任何其他方式的空間。 +1 – XING
它通常被認爲很好,可以顯示你已經嘗試或研究過的東西。 http://stackoverflow.com/help/how-to-ask – BriteSponge