需要在序列中插入字符串

时间:2019-04-13 05:42:17

标签: sql oracle

我有一个具有以下格式数据的表。我正在使用oracle 10g

SR / 0001

我要替换为 SR / MMM / 0001

我使用了替换字符串,但是它不起作用,

5 个答案:

答案 0 :(得分:2)

如果只需要在字符串中间替换'/'char,则可以用这种方式测试结果

select replace('SR/0001', '/' , '/MMM/') from dual; 

select replace(your_col,  '/' , '/MMM/') from your_table 

,如果要更新表中的值,则可以使用

 update your_table 
 set your_col = replace(your_col,  '/' , '/MMM/') 

答案 1 :(得分:1)

假设输入正好有一个正斜杠,并且附加字符串作为绑定变量给出,该绑定变量必须紧接在斜杠之后,并且后面必须跟有一个附加斜杠:

with
  inputs(str) as (
    select 'SR/0001' from dual union all
    select 'SR/0004' from dual
  )
select str, replace(str, '/', '/' || :p_additional_str || '/') as new_str
from   inputs
;

STR     NEW_STR
------- -----------
SR/0001 SR/MMM/0001
SR/0004 SR/MMM/0004

(当然,在为绑定变量分配“ MMM”之后)。

编辑

如果输入字符串较长,则具有多个斜杠,并且添加的字符串必须在第一个斜杠之后,请使用REGEXP_REPLACE,它允许您显示要替换的斜杠:

with
  inputs(str) as (
    select 'SR/0001/18-19' from dual union all
    select 'SR/0004/18-19' from dual
  )
select str, replace(str, '/', '/' || :p_additional_str || '/') as new_str
from   inputs
;

STR           NEW_STR
------------- ---------------------
SR/0001/18-19 SR/MMM/0001/MMM/18-19
SR/0004/18-19 SR/MMM/0004/MMM/18-19

使用INSTR/SUBSTR之类的方法可以提高效率,但是也许REGEXP_REPLACE可以满足您的需求。

答案 2 :(得分:0)

REPLACE不起作用?为我做。

SQL> create table test (seq varchar2(20));

Table created.

SQL> insert into test
  2    select 'SR/0001' from dual union all
  3    select 'SR/0002' from dual union all
  4    select 'SR/0003' from dual;

3 rows created.

SQL> update test set seq = replace(seq, 'SR/', 'SR/MMM/');

3 rows updated.

SQL> select * From test;

SEQ
--------------------
SR/MMM/0001
SR/MMM/0002
SR/MMM/0003

SQL>

答案 3 :(得分:0)

这将起作用:

create table abc select * from yourtable;
delete from yourtable;
insert into yourtable select regexp_replace(col1,'/','/MMM/') from abc;

答案 4 :(得分:-2)

我得到了答案

SELECT REPLACE(srno,'SR /','SR / CSG /')