文字列中の各文字の数が必要です。
例:与えられた文字列中の各文字の数
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 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()
を使用することができます。
with t (value) as (
select 'aabcccdee' from dual
)
select substr(value, level, 1) as a_char
from t
connect by level <= length(value);
次に、あなたがかもしれ回、それぞれがどのように表示されるかをカウントする集計を使用することができますそれはあなたが本当に欲しいものだ場合は単一の文字列にこれらの文字とカウントを集計するために11グラム以上):
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でこれを行うにしたい場合 - あなたは私を重視するのでおそらく、すでにPL/SQL変数でS - あなたはコンテキストスイッチと同じことを行うことができます
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
これは素晴らしいアレックスです。あなたは誰にも他の方法で答えられるような範囲を与えませんでした。 +1 – XING
ITSは、一般的に、あなたがしようとしたか、研究しているかを示すのが良いと考えました。 http://stackoverflow.com/help/how-to-ask – BriteSponge