Вы можете сделать это следующим образом:
with DTE as
(
SELECT 'deID.RESUL_12433287659.txt_234323456.txt' file_name, '|678976|TEST|TBDKK|7865679809' file_content FROM dual UNION ALL
SELECT 'deID.RESUL_34534563649.txt_345353567.txt' file_name, '1|678977||TB5KK|7866709' file_content FROM dual UNION ALL
SELECT 'deID.RESUL_44235345636.txt_537967875.txt' file_name, '|678978|TE2T|TB4KK|78669809' file_content FROM dual UNION ALL
SELECT 'deID.RESUL_35234663456.txt_423452545.txt' file_name, '4|678979|TE3T|T3DKK|785679809' file_content FROM dual
)
SELECT file_name,
file_content,
REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 1, NULL, 1) ID,
REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 2, NULL, 1) thenumber,
REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 3, NULL, 1) thename,
REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 4, NULL, 1) theaddress,
REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 5, NULL, 1) phone
FROM dte;
FILE_NAME FILE_CONTENT ID THENUMBER THENAME THEADDRESS PHONE
---------------------------------------- ----------------------------- -- --------- ------- ---------- ------------
deID.RESUL_12433287659.txt_234323456.txt |678976|TEST|TBDKK|7865679809 678976 TEST TBDKK 7865679809
deID.RESUL_34534563649.txt_345353567.txt 1|678977||TB5KK|7866709 1 678977 TB5KK 7866709
deID.RESUL_44235345636.txt_537967875.txt |678978|TE2T|TB4KK|78669809 678978 TE2T TB4KK 78669809
deID.RESUL_35234663456.txt_423452545.txt 4|678979|TE3T|T3DKK|785679809 4 678979 TE3T T3DKK 785679809
(я заменил ваш DTE на подзапрос, имитирующий данные в вашей таблице; вы бы использовали тот же DTE, который у вас уже был.)
Это работает путем сопоставления 0 или более символов, за которыми следует либо разделитель |
(который мы должны экранировать, поскольку это специальный символ в регулярных выражениях), либо конец строки.
Тогдамы находим n-е вхождение, в зависимости от того, какой столбец мы ищем.
Наконец, нам нужен последний параметр, чтобы ограничить возвращаемое значение значениями в первом наборе скобок (т. е. текстом, определенным .*?
), иначе вы получите значения с добавленным |
, а не только со значением.