Как заменить числа в строке alphanumeri c словами - PullRequest
1 голос
/ 03 марта 2020

У меня есть таблица с именем Department_details и столбцом dept_id, который содержит значения типа

10_prod
20_r&d
80_sales

et c. Я хочу запрос, который даст мне вывод, как

ten_prod
twenty_r&d
eighty_sales

et c.

Ответы [ 2 ]

5 голосов
/ 04 марта 2020

Вот один из вариантов:

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)
0 голосов
/ 04 марта 2020

Вы можете сделать что-то вроде этого:

with list1 as
(select '10_prod' as val from dual union
select '20_randd' as val from dual union
select '80_sales' as val from dual)

select a.*,
      to_char(to_date(substr(val,1,2),'j'), 'jsp')||substr(val,3,20) as text_val 
from list1 a
...