I have tried
select regexp_substr (\'sys: error: This is a message \'\'123:\'\' for column EMP_NB\', \'[[:alpha:]_]+\',1,9) from dual
I have c
You may use
select regexp_substr ('sys: error: This is a message ''123:'' for column EMP_NB', 'column[[:space:]]*([[:alpha:]_]+)', 1, 1, NULL, 1) from dual
Here,
column
- matches column
word[[:space:]]*
- 0 or more whitespace chars([[:alpha:]_]+)
- captures into Group 1 any one or more letters or underscores.The value captured is returned only, since the last group ID argument is set to 1
.
Just anchor the pattern to the end of the string:
select regexp_substr('sys: error: This is a message ''123:'' for column EMP_NB', '[[:alpha:]_]+$')
from dual
Here is a db<>fiddle.
Your example data has a period at the end. If that is part of the string, then you can use regexp_replace()
:
select regexp_replace(message, '^.*[^[:alpha:]_]([[:alpha:]_]+)[^[:alpha:]_]*$', '\1')
from (select 'sys: error: This is a message ''123:'' for column EMP_NB' as message from dual union all
select 'sys: error: This is a message ''45346:'' for column EM_NM.' as message from dual union all
select 'sys: error: This is a message ''78324f9:'' for column DEPT_NO_VL.' as message from dual
) x