0

私のロケーションフィールドには:

"Location:
SOME PLACE

Additional Details:
DEFECT
"

どういうわけか私はこれを取り出すためにこれが必要"SOME PLACE"です。関数がどのように機能するかを理解しようとしましたregexp_substr()が、C#の背景とは大きく異なり、nullなどの奇妙な結果が得られ続けます。

通常、私は次のようなことをすることを期待していました:

regexp_substr(LocationField, 'Location:(.*)\n') as "NewLocation"

そして括弧内の部分を切り抜くために…でも私は間違っていました。何か案は?

解決 :

regexp_replace(FIELD, 'Location:'||CHR(13)||CHR(10)||'(.*).*$'||CHR(13)||CHR(10)||CHR(13)||CHR(10)||'Additional Details:.*$', '\1', 1, 1, 'n' ) as "Location"
4

3 に答える 3

1

あなたはこのようにそれを行うことができます:

regexp_replace(LocationField, 
               'location:'||chr(10)||'([^'||chr(10)||']*).*$', '\1', 
                1, 1, 'n' ) 

つまり、正規表現文字列

location:\n([^\n]*).*$

しかし、オラクルは機能しないため、代わり\nにスプライスしchr(10)ます。

nモードは、改行文字と一致することを意味します.(したがって.*$、一部のテキストに続く改行の後のすべてを削除します。

場所に複数行のテキストとそれに続く追加の詳細を含めることができる場合は、次を使用できます。

regexp_replace(LocationField, 
               'location:'||chr(10)||'(.*)'||chr(10)||'Additional.*$',  
               '\1', 1, 1, 'n' ) as "NewLocation"
于 2013-02-11T16:55:36.590 に答える
0

代わりにREGEXP_REPLACEを使用してください。

select REGEXP_REPLACE( target, LocationField, 'Location:(.*)\n', '' ) as "NewLocation"
from your_table;

あなたを正しい方向に向かわせる必要があります。

于 2013-02-11T14:31:12.530 に答える
0

正規表現を複数行モードで実行する必要があります。これは、REGEXP_SUBSTR()呼び出しの完全な署名を入力することを意味します。

select regexp_substr( locationField, '^([A-Z ]+)$', 1, 1, 'm')
from your_table
/

これ'm'は、複数行モードを指定する一致パラメーターです。つまり^、一致するパターンでは、文字列の開始と終了ではなく、境界 $として扱われます。詳細をご覧くださいnewline

于 2013-02-11T15:05:04.837 に答える