Как использовать PL / SQL-REGEXP_REPLACE, чтобы удалить 0D из конца строки? - PullRequest
0 голосов
/ 10 августа 2011

Я хочу использовать REGEXP_REPLACE в PL / SQL в Oracle 10g, чтобы удалить конечный HEX-0D из строки.Я нашел регулярное выражение из этого вопроса .

В Perl это выглядит следующим образом:

$output =~ tr/\x{d}\x{a}//d;  

или

$output =~ s/\s+\z//;

Как я могу перевестиэто к PL / SQL?

Ответы [ 2 ]

1 голос
/ 10 августа 2011

У вас также есть функция RTRIM

select dump(a), dump(rtrim(a,chr(13))) from (select 'test'||chr(13) a from dual);
1 голос
/ 10 августа 2011
/* PL/SQL */

declare
  in_str constant varchar2(30) := 'foo' || chr(13) || 'bar' || chr(13);
  out_str varchar2(30);
begin
  dbms_output.put_line('in_str = ' || utl_raw.cast_to_raw(in_str));

  select regexp_replace(in_str, chr(13) || '$', '') into out_str from dual;

  dbms_output.put_line('out_str = ' || utl_raw.cast_to_raw(out_str));
end;
/

/* SQL */

select utl_raw.cast_to_raw('foo' || chr(13) || 'bar' || chr(13)) as BEFORE from dual;

select utl_raw.cast_to_raw(
  regexp_replace('foo' || chr(13) || 'bar' || chr(13), chr(13) || '$', '')
) as AFTER from dual;

/* OUTPUT */

Session altered.

in_str = 666F6F0D6261720D
out_str = 666F6F0D626172

PL/SQL procedure successfully completed.

BEFORE
------------------------------------------------------------------------------
666F6F0D6261720D

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