簡體   English   中英

在Oracle中使用REGEXP_SUBSTR從字符串中提取ID號

[英]Extract ID number from String using REGEXP_SUBSTR in Oracle

我有一列NAME(VARCHAR2),用於存儲帳戶的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。 對於其余的記錄,我該如何做? 我無法僅提取ACCT_ID值而沒有任何空格(例如'989190293')。

先感謝您!

使用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

嘗試使用(\\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!>

有兩個注意事項:(1)在某些情況下,您的輸入在ACCT_ID之后帶有:,而在其他情況下則沒有。 通過添加:?固定 在搜索模式中。 (2)輸出將保留輸入中的空格; 如果不希望這樣,可以將其包裝在replace( ..., ' ')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM