我如何使用 REGEXP-SUBSTR

How can I use REGEXP-SUBSTR

我有

206579227 - Account - Account Status Enquiry - [OLUBUSOLA]

205389263 - Loans - Loan Liqidation -[HASSAN] 

在一栏中

如何使用 REGEXP 在单独的列中像这样分隔它们:

  ACC        Subject       Issue        Name
206579227 |  Account | Account status Enquiry | OLUBUSOLA 
205389263    Loans     Loan Liqidation          HASSAN

我试过了,我得到了号码 REGEXP_SUBSTR (regardingobjectname, '(\S*)(\s)') as nuban_number ,

我也试过这个主题 REGEXP_SUBSTR (regardingobjectname, '(\S*)(\s)(.*)', 1, 3)

算出其他的

对于 Oracle,这将是(第 1 - 4 行代表样本数据)

SQL> with test (col) as
  2    (select '206579227 - Account - Account Status Enquiry - [OLUBUSOLA]' from dual union all
  3     select '205389263 - Loans - Loan Liqidation -[HASSAN]' from dual
  4    )
  5  select t.col,
  6         trim(regexp_substr(t.col, '[^-]+', 1, x.column_value)) val
  7  from test t cross join table(cast(multiset(select level from dual
  8                                             connect by level <= regexp_count(col, '-') + 1
  9                                            ) as sys.odcinumberlist)) x
 10  order by t.col, x.column_value;

COL                                                               VAL
----------------------------------------------------------------- -------------------------
205389263 - Loans - Loan Liqidation -[HASSAN]                     205389263
205389263 - Loans - Loan Liqidation -[HASSAN]                     Loans
205389263 - Loans - Loan Liqidation -[HASSAN]                     Loan Liqidation
205389263 - Loans - Loan Liqidation -[HASSAN]                     [HASSAN]
206579227 - Account - Account Status Enquiry - [OLUBUSOLA]        206579227
206579227 - Account - Account Status Enquiry - [OLUBUSOLA]        Account
206579227 - Account - Account Status Enquiry - [OLUBUSOLA]        Account Status Enquiry
206579227 - Account - Account Status Enquiry - [OLUBUSOLA]        [OLUBUSOLA]

8 rows selected.

SQL>
with test (col) as (
 select '206579227 - Account - Account Status Enquiry - [OLUBUSOLA]' from dual union all
 select '205389263 - Loans - Loan Liqidation - [HASSAN]' from dual union all
 select '205389263 -  - Loan Liqidation - [HASSAN]' from dual union all
 select '205389263 -  -  - [HASSAN]' from dual union all
 select '203202332 - E-channel - Loan account - [skhddk]' from dual union all 
 select '203202445 - channel - Loan account - [Modupe]' from dual
) 
select 
regexp_substr(col, '(.*?) - ', 1, 1, null, 1) acc,
regexp_substr(col, '(.*?) - ', 1, 2, null, 1) subj,
regexp_substr(col, '(.*?) - ', 1, 3, null, 1) issue,
regexp_substr(col, '\[(.+)\]\s*$', 1, 1, null, 1) name
from test
;

ACC                  SUBJ            ISSUE                     NAME           
-------------------- --------------- ------------------------- ---------------
206579227            Account         Account Status Enquiry    OLUBUSOLA      
205389263            Loans           Loan Liqidation           HASSAN         
205389263                            Loan Liqidation           HASSAN         
205389263                                                      HASSAN         
203202332            E-channel       Loan account              skhddk         
203202445            channel         Loan account              Modupe         

6 rows selected. 

这里的分隔符是[space][破折号][space]。

对于正则表达式的解释:

https://regex101.com/r/ANmLWS/1

https://regex101.com/r/HU6hDr/1/