как разобрать первое и второе вхождение числа между двумя строками - PullRequest
0 голосов
/ 31 января 2020

Можете ли вы помочь мне с анализом чисел из строки?

Я хочу выбрать первое и второе вхождение числа из строки, которые выглядят так:

 PKGGeneral.SetObjectAttribute(i_DimObject=4,i_ObjectID=163225122,i_Attribute=NAME,i_Value (VarChar2)=xDSL:1.4.51);

или

PKGPort.CreateLogicalPort(io_portid=197604073,i_name=VLAN_segment:7239554:IPTV GPON_Port_A,i_nodeid=123431890,i_porttypeid=1900000150,i_bandwidthid=1,i_parentportid=186300246);

Первое вхождение в столбце A, а второе вхождение в столбце B.

Результат: пример A

column A : 4
column B : 163225122

пример B

column A : 197604073
column B : 7239554

Спасибо.

1 Ответ

0 голосов
/ 31 января 2020

Использование regexp_substr():

select
    regexp_substr(mycol, '\d+', 1, 1) colA,
    regexp_substr(mycol, '\d+', 1, 2) colB
from mytable

\d+ захватывает непрерывный ряд цифр. Четвертый аргумент указывает, какой случай должен быть возвращен.

Демонстрация на DB Fiddle :

with mytable as (
    select 'PKGGeneral.SetObjectAttribute(i_DimObject=4,i_ObjectID=163225122,i_Attribute=NAME,i_Value (VarChar2)=xDSL:1.4.51);' mycol from dual
    union all
    select 'PKGPort.CreateLogicalPort(io_portid=197604073,i_name=VLAN_segment:7239554:IPTV GPON_Port_A,i_nodeid=123431890,i_porttypeid=1900000150,i_bandwidthid=1,i_parentportid=186300246);' from dual
)
select
    regexp_substr(mycol, '\d+', 1, 1) colA,
    regexp_substr(mycol, '\d+', 1, 2) colB
from mytable
COLA      | COLB     
:-------- | :--------
4         | 163225122
197604073 | 7239554  
...