У меня есть набор данных, который может хранить номер счета в нескольких разных вариантах. Он может содержать дефисы или пробелы в качестве разделителей сегментов, или он может быть полностью конкатенирован. Мой желаемый результат - это первые три и последние 5 буквенно-цифровых символов. У меня возникли проблемы с соединением двух сегментов «FIRST_THREE_AND_LAST_FIVE:REGEXP_SUBSTR для возврата первого и последнего сегмента
with testdata as (select '1-23-456-78-90-ABCDE' txt from dual union all
select '1 23 456 78 90 ABCDE' txt from dual union all
select '1234567890ABCDE' txt from dual union all
select '123ABCDE' txt from dual union all
select '12DE' txt from dual)
select TXT
,regexp_replace(txt, '[^[[:alnum:]]]*',null) NO_HYPHENS_OR_SPACES
,regexp_substr(regexp_replace(txt, '[^[[:alnum:]]]*',null), '([[:alnum:]]){3}',1,1) FIRST_THREE
,regexp_substr(txt, '([[:alnum:]]){5}$',1,1) LAST_FIVE
,regexp_substr(regexp_replace(txt, '[^[[:alnum:]]]*',null), '([[:alnum:]]){3}',1,1) FIRST_THREE_AND_LAST_FIVE
from testdata;
Мой желаемый результат будет:
FIRST_THREE_AND_LAST_FIVE
-------------------------
123ABCDE
123ABCDE
123ABCDE
123ABCDE
(null)
В идеале, я хочу, чтобы найти что-то вроде ([[цифру, буква]]) {3} и ([[цифра, буква]]) {5} $, что позволит любому количеству символов в середине , –