Извлечь подстроку из поля PLSQL

Я только начинаю с PL/SQL, и мне нужно извлечь определенную информацию из поля, где я сохранил весь XML-текст, содержащий примерно 4000 символов, если не больше, сверяясь с соответствующей документацией, я вижу, что для того, что мне нужно, вы можете использовать функцию SUBSTR или функцию я REGEXP_SUBSTR не знаю, какую из двух можно использовать в моем случае.

Из всего текста, который я сохранил в поле, мне нужно извлечь ровно одни конкретные данные, ниже приведена только часть текста, который у меня есть в поле.

fechaAutenticacion="2019-10-17T17:14:23"

Из этой части текста мне нужно извлечь то, что в ней содержится fechaAutenticacion, я имею в виду эту часть 2019-10-17T17:14:23 без кавычек, а затем отобразить ее в новом столбце.

Ниже приведен запрос к таблице и полю, в котором у меня есть весь текст длиной более 4000 символов.

SELECT SPRCMNT_TEXT_NAR
        FROM SPRCMNT

person John Doe    schedule 24.03.2020    source источник


Ответы (2)


Предполагая, что шаблон ''fechaAutenticacion="<DATE>"' постоянно указывает на часть, которую вы хотите перехватить, вы можете использовать regexp_substr() следующим образом:

select regexp_substr(sprcmnt_text_nar, 'fechaAutenticacion="([^"]+)"', 1, 1, null, 1) authentication_date
from sprcmnt

Круглые скобки определяют группу захвата в соответствующей части строки; затем последний аргумент указывает Oracle вернуть первую (единственную) захваченную группу, а не все совпадения.

person GMB    schedule 24.03.2020

У меня возникнет соблазн использовать regexp_replace():

select regexp_replace(sprcmnt_text_nar, '^.*fechaAutenticacion="([^"])".*$', '\1') 
person Gordon Linoff    schedule 25.03.2020