我如何使用 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]。
对于正则表达式的解释:
我有
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]。
对于正则表达式的解释: