Вот один из вариантов:
SQL> with test (col) as
2 (select '10_prod' from dual union all
3 select '20_r&d' from dual union all
4 select '80_sales' from dual
5 )
6 select col,
7 regexp_substr(col, '^\d+') num,
8 to_char(to_date(substr(col, 1, instr(col, '_') - 1), 'j'), 'jsp') wrd,
9 --
10 to_char(to_date(substr(col, 1, instr(col, '_') - 1), 'j'), 'jsp') ||
11 substr(col, instr(col, '_')) result
12 from test;
COL NUM WRD RESULT
-------- -------------------------------- ---------- --------------------
10_prod 10 ten ten_prod
20_r&d 20 twenty twenty_r&d
80_sales 80 eighty eighty_sales
SQL>
Что он делает (шаг за шагом, чтобы вы могли следовать ему):
- строки # 1 - 5: пример данных
- строка # 7: один способ извлечь число из начала строки (с помощью регулярных выражений)
- строка # 8: другой способ (с помощью
substr
+ instr
вероятно лучше). Он - дополнительно - преобразует его в дату, используя формат 'J', и в символы, используя формат JSP. Это обычный способ написания чисел - строки # 10 - 11: объедините записанное число (строка # 10) с остальной частью строки (строка # 11)