2017-03-10 6 views
1

私は、アカウントのID番号を格納する列NAME(VARCHAR2)を持っています。OracleのREGEXP_SUBSTRを使用して文字列からID番号を抽出します

ROW_NBR NAME 
----  ------------------------------------- 
1   JOHN SMITH ACCT_ID 123762839 PTY LTD 
2   HELLOWORLD PTY LDT ACCT_ID: 123 762 839 CORP LTD 
3   GLOBAL FUND PER_ID 32 123 456 789 ACCT_ID 989 190 293 CORP 
4   WORLD CORP PER_ID: 32 123 456 789 ACCT_ID: 243 130 222 PTY 

私は、9桁のACCT_IDを抽出 'ACCT_ID%' の文字列を削除し、VARCHAR2(09)とのカラムにそれを保存しようとしています。

結果は次のようになります。

ROW_NBR NAME          ACCT_ID 
----  ------------------------------------- ---------- 
1  JOHN SMITH PTY LTD      123762839 
2  HELLOWORLD PTY LDT CORP LTD    123712833 
3  GLOBAL FUND PER_ID 32 123 456 789 CORP 989190293 
4  WORLD CORP PER_ID: 32 123 456 789 PTY 243130222 

これまでのところ私は数がスペースを持っていないことを提供し、ACCT_IDを抽出することができました。

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR(NAME, 'ACCT_ID \s*\d+'), '\d+') FROM DUAL; 

このSQLは、9桁のACCT_IDを取得できるため、第1レコードのみで動作します。それ以外のレコードではどうすればいいですか?スペースを使わずにACCT_IDの値だけを抽出することはできません(例: '989190293')。

ありがとうございます!

答えて

2

REGEXP_REPLACEを使用して、これを試してみてください:

with t (ROW_NBR, NAME) as (
    select 1 ,'JOHN SMITH ACCT_ID 123762839 PTY LTD'      from dual union all 
    select 2 ,'HELLOWORLD PTY LDT ACCT_ID: 123 762 839 CORP LTD'   from dual union all 
    select 3 ,'GLOBAL FUND PER_ID 32 123 456 789 ACCT_ID 989 190 293 CORP' from dual union all 
    select 4 ,'WORLD CORP PER_ID: 32 123 456 789 ACCT_ID: 243 130 222 PTY' from dual 
) 
-- Test data above. Actual solution start here -- 

select 
    replace(regexp_replace(name, '.*ACCT_ID\D*([0-9 ]+).*','\1'),' ') 
from t; 

が生成されます

123762839 
123762839 
989190293 
243130222 
+0

ありがとうございました!チャームのように働いた! :) – Aurora

0

(\s*\d)+を試してみてください - より良い、おそらくまたは、(\s*\d){9}を念の何らかの理由で口座番号の後に、さらに数字があります。

テストされていないが、このような何か:

SELECT row_nbr, name, REGEXP_SUBSTR(NAME, 'ACCT_ID:? ((\s*\d){9})', 1, 1, null, 1) 
FROM <SOMETHING_SURELY_NOT_FROM_DUAL!> 

2つのノート:例のカップルでACCT_ID後、彼らは他のケースでそれを持っていない:(1)あなたの入力を持っています。検索パターンに:?を追加することで修正されました。 (2)出力は入力内のスペースを保存します。それが望ましくない場合は、replace(..., ' ')の範囲で囲むことができます。

関連する問題