2017-05-23 9 views
0

Regexp_substrを使用して、プロパティ・フィールドからユニット番号を抽出しようとしています。 以下はクエリです。Oracle Query on Regexp_substr

regexp_substr(PROPERTY,'(#)[^\S]+ ') 

結果の一部は正しいですが、他は以下のように戻ってきたものの:

#05-08 DOVER PARKVIEW 

は、私はすべてのアルファベットや文言を省略して何をする必要があります知っていることはできますか? ありがとうございます。

+2

ので、入力文字列が何であり、あなたが必要な結果は何ですか?ところで、Oracle 11g/12g以上ですか? –

+2

そして、あなたは '[^ \ S]'と何を一致させるつもりでしたか? –

+0

ユニット番号と一致するようにしようとしています。#05-08です。しかし、これはちょうど1つの書式であり、#19-1215や#06-143のような他のユニット番号があります。 –

答えて

1

[^\S]のパターンは、\と大文字のSではなく、任意の文字に一致します。あなたは数字が最後1引数は内容を抽出する正規表現エンジンを告げる-に続いて、再び#後に数字を1+のみ

regexp_substr(PROPERTY, '#(\d+-\d+)', 1, 1, NULL, 1) 

との一致の一部を抽出1+キャプチャする必要が

ID 1を持つキャプチャグループ(キャプチャグループはパターンの中で唯一のものです)。

  • # - リテラル#
  • (\d+-\d+) - キャプチャグループ1つのマッチング:
    • \d+から1桁以上
    • - - ハイフン
    • \d+から1桁以上。

は参照online demo

select regexp_substr('#05-08 DOVER PARKVIEW', '#(\d+-\d+)', 1, 1, NULL, 1) as RESULT from dual 

enter image description here