2017-02-22 6 views
1

私は以下のような文字列を持っており、その中に10472314を入れる必要があります。これは最後の言葉ですが、この場合は1つです。 PL/SQLブロックで取得する方法を教えてもらえますか?任意の文字列関数ですか? UPDATE文字列の最後の2番目の単語を取得する方法は?

@

processed "SCOTT"."PRINCE05"       10472314 rows 

は最後に、私は、文字列関数を使用してソリューションを構築するために管理しました。

SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
+0

あなたが正直であれば、もう一度質問を読んで(そしてそれが何であるかわからないと思っても)それはあなたにも意味をなさないと認めます。それはどのように米国に理にかなっていると思われますか? 「文字列の行数」とはどういう意味ですか?そして、それは「**特定の単語**を文字列で取得する方法」(あなたのタイトル)と何が関係していますか? – mathguy

+0

コメントありがとうございます。タイトルとステートメントを修正しました。あなたを混乱させて申し訳ありません。 – Sigularity

+0

OK - "最後から2番目"の単語(文字列の最後から2番目の単語)を意味すると仮定します。それはあなたがいつも必要としているものなのですか?文字列の最後から2番目の単語ですか?そして、スペースで区切られたもの(または空白、タブ、改行など - 一般に「空白」と呼ばれるもの)をどのように定義しますか? – mathguy

答えて

0

INSTRで '-1'の魔法のオプションを使用すると、逆の順序で文字列を検索できます。そうすることで、私は最後の言葉を見つけることができると信じていますが、以下のようなものです。 それは汚れて見えますが、それはちょうど私のために働く。文字列の末尾

SELECT SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
FROM prince_test; 

INSTR(name, ' ', -1 , 2) + 1 ==> the second occurrence of SPACE 
INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2) ==> position gap between the first occurrence and the second. 
1

ワード '行' の前の数字のセット:

regexp_replace(text, '^(.+)([0-9]+)(rows)$', '\2') 

第3ワード:

regexp_substr(text, '\S+', 1, 3) 

第最後のワード(N ワード第n =ワード数-1):

regexp_substr(text, '\S+', 1, regexp_count(text,'\S+') -1) 

大量の行を処理している場合、正規表現の機能が遅くなることがあります。あなたがしなければならないトレードオフは、正規表現の表現力と、普通のsubstrinstrのパフォーマンスの間です。個人的には、明確なパフォーマンスの問題がない限り正規表現を好む。

+0

それは動作します。コメントありがとう。 – Sigularity

関連する問題