Как я могу использовать REGEXP-SUBSTR - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть

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 (относительно имени объекта, '(\ S *) (\ s)') как nuban_number,

Я пробовал это для предмета также REGEXP_SUBSTR (относительно имени объекта, '(\ S *) (\ s) ( . *) ', 1, 3)

Считай, разберись с остальными

Ответы [ 2 ]

1 голос
/ 03 апреля 2020
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. 

Здесь разделителем является [пробел] [тире] [пробел].

для объяснения регулярных выражений:

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

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

0 голосов
/ 03 апреля 2020

По состоянию на 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...