Добавить строку перед номером в строке - PullRequest
0 голосов
/ 04 октября 2018

Я ищу решения.

У меня есть строка типа "AAAAAA 8 BBBBBB 5" Я должен заменить пробел перед числами на -, а другой пробел на _-_.

Может липомогите мне.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Я бы сделал это с 2 regexp_replace следующим образом:

with the_string as (
    select 'AAAAAA 8 BBBBBB 5' s from dual
),
the_string_with_numbers_done as (
    select regexp_replace (s,' (\d)','-\1') s from the_string
)
select regexp_replace (s,' ','_-_') from the_string_with_numbers_done
;

Вот информация о regexp_replace: https://docs.oracle.com/database/121/SQLRF/functions163.htm#SQLRF06302

И этот сайт мне нравится использовать для работы на регулярной основе.выражения: https://regexr.com/

Редактировать: Слегка измененная версия, основанная на более поздних комментариях от OP - для измененной обработки пробелов, так как OP, кажется, хочет обрабатывать последовательные пробелы как единицу в некоторых / всех случаях,Требования все еще не ясны мне на 100%, особенно то, что blank blank number должно стать: dash number или underscore dash underscore dash number.Ниже версия делает первый (dash number).HTH

with the_string as (
    select 'AAAAAA 8 BBBBBB 5' s from dual
),
the_string_with_numbers_done as (
    select regexp_replace (s,' +(\d)','-\1') s from the_string
)
select regexp_replace (s,' +','_-_') from the_string_with_numbers_done
;+
0 голосов
/ 04 октября 2018

Я тоже добавил

with the_string as (
    select TEST s from AA_TEST
),
**multiple_spaces as (
  select regexp_replace (s, '\s{2,}', ' ') s from the_string
),**
the_string_with_numbers_done as (
    select regexp_replace (s,' (\d)','_\1') s from multiple_spaces
)
select regexp_replace (s,' ','_-_') from the_string_with_numbers_done
;

И теперь все работает идеально

0 голосов
/ 04 октября 2018

Вы можете использовать REGEXP_REPLACE здесь.

Пример:

select regexp_replace(
         regexp_replace('AAAAAA 8 BBBBBB 5', '\s([[:digit:]]+)', '-\1', 1, 0), 
                                               '([[:digit:]]+\s)', '\1_-_', 1, 0) as str
  from dual;

STR
--------------------
AAAAAA-8 _-_BBBBBB-5

Более подробная информация здесь: https://docs.oracle.com/database/121/SQLRF/functions163.htm#SQLRF06302

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...