I’ve got a field named signal_notes containing strings like the follow (this would be a single value of signal_notes):
x
"{ ^search_date^: ^2021-01-05^,
^filing_date^: ^^,
^expiry_date^: ^^,
^other_liens^: ^^,
^who_1st_positon^: ^^,
^who_2nd_position^: ^^,
^who_3rd_position^: ^^,
^priority_from_1^: ^^,
^priority_from_2^: ^^,
^priority_from_3^: ^^,
^notes^: ^^
^client_facing_notes^: ^^
}"
Sometimes, the ^expiry_date^ line will have a date between the ^’s in the format ‘YYYY-MM-DD’.
My new field expiry_date will ideally be in the format ‘YYYY-MM-DD’ with the date string from the signal_notes field.
This is what I’ve got so far, but it returns nothing.
select
(regexp_substr(signal_notes, 'expiry_date [0-9-]*' )) as expiry_date
from db
Ive also tried
(regexp_substr( signal_notes, '^expiry_date^: ^[0-9-]*^' )) as first_as_of_date_context
with the same results.
Any advice welcome
Advertisement
Answer
If I understand correctly, you want a subexpression. The ^
is a pain, one way around that is:
regexp_substr(signal_notes, '.expiry_date.: .([0-9-]*).', 1, 1, 'e')
This is very similar to your last attempt, except it has the subexpression so it should only return the date.
You should also be able to use \
as an escape character:
regexp_substr(signal_notes, '\^expiry_date\^: \^([0-9-]*)\^', 1, 1, 'e')