2016-03-22 3 views
1

他のプログラミング言語では簡単な問題を解決しようとしていますが、PL/SQLでは処理できません。私はPL/SQLの初心者だと言わざるを得ない。PL/SQLで指定された文字がいくつあるかを調べるには

このような問題は次のようなものです。私は多くの単語がスペースで区切られた文字列を持っています。

私はこの問題に何かしましたが、私が探しているものではありません。私のコードでは、すべての文字列に "u"がいくつあるかを数えます。何か案は?ありがとう。

set serveroutput on; 
DECLARE 
    v_sir VARCHAR2(225) := 'grass car unity united car until'; 
    v_I NUMBER := 1; 
    v_count NUMBER := 0; 
BEGIN 
    WHILE v_I <= LENGTH(v_sir) 
    LOOP 
     IF substr(v_sir, v_I, 1) IN ('u', 'U') THEN 
      v_count := v_count + 1; 
     END IF; 
     v_I := v_I + 1; 
    END LOOP; 
dbms_output.put_line('The number of "u" is: ' || v_count); 
END; 

答えて

3
SET SERVEROUTPUT ON; 
DECLARE 
    v_sir VARCHAR2(225) := 'grass car unity united car until unusual'; 
    v_count NUMBER  := REGEXP_COUNT(v_sir, '\S*u\S*'); 
BEGIN 
    dbms_output.put_line('The number of words containing "u" is: ' || v_count); 
END; 
/

出力4

+0

私はO(1)アプローチが好きです。私は文字列を区切り文字としてスペースで区切り、次に 'INSTR'が 'u'を確認してから' COUNT(*) 'をチェックするようにSQLとして回答を投稿しようとしていました。しかし、私はそれがどこにも近くないと思う。 – ruudvan

0

正規表現のアプローチは単純であり、まったくのPL/SQLを必要としない - あなただけのプレーンなSQLからそれを呼び出すことができます。しかし、これを演習としてやっていて、文字列内の文字をループしたり、必要に応じて空白を探したりして単語の境界を見つけることができれば、

set serveroutput on; 
declare 
    v_sir varchar2(225) := 'grass car unity united car until unused nu'; 
    v_word_has_u boolean := false; 
    v_count number := 0; 
begin 
    for v_i in 1..length(v_sir) loop 
    if substr(v_sir, v_i, 1) = ' ' then 
     -- new word; can look for other whitespace characters too 
     -- reset flag so we start looking for 'u's again 
     v_word_has_u := false; 
    elsif v_word_has_u then 
     -- already counted this word 
     continue; 
    elsif substr(v_sir, v_i, 1) in ('u', 'U') then 
     -- first u/U in the word we're looking at, so incremment counter 
     v_count := v_count + 1; 
     -- set flag so we don't count any more from this word 
     v_word_has_u := true; 
    end if; 
    end loop; 
    dbms_output.put_line('The number of words with "u" is: ' || v_count); 
end; 
/

PL/SQL procedure successfully completed. 

The number of words with "u" is: 5 

しかし、これは練習として純粋である、がある場合に、現実の世界でこのような何かをする理由はありません内蔵:のみ「Uはすでに見たことがない言葉でだの外観を数えますあなたが使うことができる機能です。

関連する問題