我有一个具有以下格式数据的表。我正在使用oracle 10g
SR / 0001
我要替换为 SR / MMM / 0001
我使用了替换字符串,但是它不起作用,
答案 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 /')