Как заменить строку с помощью Regexp_Replace в Oracle - PullRequest
0 голосов
/ 13 марта 2019

Я хочу заменить это:

"STORES/KOL#10/8/36#1718.00#4165570.00#119539388#PT3624496#9902001#04266#6721#PT3624496-11608091-1-55-STORES/KOL"

с этим:

"STORES/KOL#10#8#36#1718.00#4165570.00#119539388#PT3624496#9902001#04266#6721#PT3624496-11608091-1-55-STORES/KOL"

в основном это условная замена, я хочу заменить / на # как STORES/KOL строка должна быть STORES/KOL но 10/8/36 строка должна быть 10#8#36

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Это заменит 2-го и 3-го / символа на #:

Установка Oracle :

CREATE TABLE test_data ( value ) AS
SELECT '"STORES/KOL#10/8/36#1718.00#4165570.00#119539388#PT3624496#9902001#04266#6721#PT3624496-11608091-1-55-STORES/KOL"'
FROM   DUAL;

Запрос :

SELECT REGEXP_REPLACE(
         value,
         '^(.*?/.*?)/(.*?)/(.*)$',
         '\1#\2#\3'
       ) AS replacement
FROM   test_data

выход

| REPLACEMENT                                                                                                       |
| :---------------------------------------------------------------------------------------------------------------- |
| "STORES/KOL#10#8#36#1718.00#4165570.00#119539388#PT3624496#9902001#04266#6721#PT3624496-11608091-1-55-STORES/KOL" |

дБ <> скрипка здесь

0 голосов
/ 13 марта 2019
with s as (select '"STORES/KOL#10/8/36#1718.00#4165570.00#119539388#PT3624496#9902001#04266#6721#PT3624496-11608091-1-55-STORES/KOL"' str from dual)
select 
replace(replace(str, '/', '#'), 'STORES#KOL', 'STORES/KOL') result_str_1,
regexp_replace(str, '(\d)/', '\1#')                         result_str_2
from s;
0 голосов
/ 13 марта 2019

Вот один вариант, используя REGEXP_REPLACE.Мы можем попробовать настроить следующий шаблон регулярных выражений:

#(\d+)/(\d+)/(\d+)#

Затем замените три группы захвата, заменив разделители пути знаками фунта.

WITH yourTable AS (
    SELECT 'STORES/KOL#10/8/36#1718.00#4165570.00#119539388#PT3624496#9902001#04266#6721#PT3624496-11608091-1-55-STORES/KOL' AS input FROM dual
)

SELECT
    input,
    REGEXP_REPLACE(input, '#(\d+)/(\d+)/(\d+)#', '#\1#\2#\3#') AS output
FROM yourTable;

Демонстрация

Достаточно ли точна или точна эта замена регулярного выражения для остальных ваших данных, зависит от тех данных, которые вы нам никогда не показывали.

...