Так что, если значение "ABC1234", то мне нужно вырезать ABC и 1234 отдельно.Но если в качестве значения используется только «ABC», мне просто нужен «ABC».
Среди других решений я предлагаю одно решение, как показано ниже:
Логика :
1) Заменить все цифры на 1
.Проверьте положение digit
в string
.Если в строке нет цифры, используйте String
.
2) Извлеките алфавиты из позиции 1st
в позицию, где начинается цифра.
3) Извлеките цифру изпозиция начинается до конца.Если цифра не существует, установите ее NULL
--Dataset Preparation
with test (col) as
(select 'ABC1234' from dual union all
select 'ABC' from dual union all
select 'dEfH456' from dual union all
select '123GHI' from dual union all
select '456' from dual
)
--Query
select col Original_Column,
CASE
WHEN (instr(regexp_replace(col,'[0-9]','1'),'1',1)) = 0
then col
else
substr( col,1,instr(regexp_replace(col,'[0-9]','1'),'1',1)-1)
end Col_Alp,
CASE
WHEN (instr(regexp_replace(col,'[0-9]','1'),'1',1)) = 0
then NULL
Else
substr( col,instr(regexp_replace(col,'[0-9]','1'),'1',1))
END col_digit
from test
where regexp_like(col, '^[a-zA-Z0-9]+$');
Результат:
SQL> /
Original_Column Col_Alp col_digit
---------- ----- -----
ABC1234 ABC 1234
ABC ABC NULL
dEfH456 dEfH 456
123GHI NULL 123GHI
456 NULL 456