Заменить символ в данной позиции в oracle - PullRequest
0 голосов
/ 07 апреля 2020

Допустим, у меня есть строка из 16 тыс. Символов, которая может содержать запятую (,) во многих позициях, но я хочу заменить запятые (,) в позиции 4001, 8001, 2001 только на нуль

* 1002. * В других позициях могут быть запятые (,), например, 4002. Не следует заменять.

Пример данных ниже

        WITH data
         AS (SELECT To_clob(Lpad('A', 4000, '0'))
                    ||To_clob(Lpad('A', 4000, '0'))
                    ||To_clob(Lpad('A', 4000, '0'))
                    ||To_clob(Lpad('A', 4000, '0'))
                    ||To_clob(Lpad('A', 4000, '0')) AS file_data
             FROM   dual),
         data1
         AS (SELECT LEVEL
                    lvl
                    ,
                    Substr(file_data, Decode(LEVEL, 1, LEVEL,
                                                    ( ( LEVEL - 1 ) * 4000 ) + 1),
                    4000)
                       file_data,
                    1
                       order1
             FROM   data
             CONNECT BY ( ( LEVEL - 1 ) * 4000 ) + 4000 <= Length(file_data))
    SELECT Wm_concat(To_clob(file_data)) file_data
    FROM   data1; 

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете использовать REGEX_REPLACE для замены символов в определенной позиции.

SELECT 
    REGEXP_REPLACE('This,is,mystring,with,16kchars,imtrying,toreplace,comma,at30th,position','(^.{30})(.{1})(.*)$','\1\3') 
FROM dual; 

Выход.

 This,is,mystring,with,16kcharsimtrying,toreplace,comma,at30th,position

Вы можете изменить свою позицию соответственно. Но это не указание c на запятую. Он заменяет что-либо с в данной позиции

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