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
を更新しました