REGEXP_REPLACE
を使用できます :
SELECT REGEXP_REPLACE('1234567 - 7654321 - some - more - text', '^\d+[^\d]+(\d+).*$', '\1');
出力
7654321
この正規表現は、いくつかの桁数で始まる文字列を検索します(^\d+
)の後に数字以外の文字([^\d]+
)、次に別の数字のグループ((\d+)
)文字列の終わりまでいくつかの文字が続きます(.*$
)。 ()
数字の2番目のグループの周りに、キャプチャグループが作成されます。これは、置換文字列で\1
を使用して参照できます。 。 REGEXP_REPLACE
以降 正規表現に一致する文字列の部分のみを置き換えます。全体に一致する正規表現が必要です。 必要なデータだけに置き換えるための文字列。
更新
最初の数字の前に文字が含まれている可能性がある場合は、正規表現を次のように変更する必要があります
^[^\d]*\d+[^\d]+(\d+).*$
アップデート2
最初に数字のセットが1つしかない可能性がある場合は、最初の部分の一致をオプションにする必要があります。キャプチャしていないグループでそれを行うことができます:
^[^\d]*(?:\d+[^\d]+)?(\d+).*$
これにより、最初の数字のセットでの一致がオプションになり、存在しない場合(つまり、数字のセットが1つしかない場合)、正規表現は引き続き一致します。非キャプチャグループを使用する(?:
を追加する) グループの先頭まで、置換文字列を\1
から変更する必要はありません。 。 SQLFiddle
を更新しました