我需要替换存储在Oracle DB文本字段中的路径。但是,路径已经指定了不同的情况(即MYPATH,MyPath,Mypath,mypath)。使用REPLACE
和UPPER
的组合时,它无法正常工作,即:
UPDATE Actions
SET Destination = REPLACE(UPPER(Destination), 'MYPATH', 'My_New_Path')
这会替换,但会将所有内容保留为大写 - 即使对于无法替换的行
也是如此之前:MyPath\FileName
- 之后:My_New_Path\FILENAME
之前:DummyText
- 之后:DUMMYTEXT
我真正需要的是将MyPath的任何出现替换为My_New_Path,而不触及其他行或其他部分的外壳
有什么想法吗?我一直在摸不着头脑......
PS:使用Oracle 9 ...
答案 0 :(得分:3)
也许这就是:
UPDATE Actions
SET Destination = SUBSTR(Destination,1,INSTR(UPPER(Destination), 'MYPATH')-1)
|| 'My_New_Path'
|| SUBSTR(Destination,INSTR(UPPER(Destination), 'MYPATH')+6)
WHERE UPPER(Destination) LIKE '%MYPATH%';
答案 1 :(得分:1)
我打算建议使用regexp_replace(),而不是Oracle 9中没有的IIRC。
那样的话:
UPDATE atable
SET afield=SUBSTR(afield, 1, (INSTR(UPPER(afield),'old')-1)
|| 'new'
|| SUBSTR(afield, INSTR(UPPER(afield),'old')+LENGHT('old'), LENGTH(afield))
WHERE afield LIKE '%' || 'old' || '%';
答案 2 :(得分:1)
两个答案的组合+调整使其有效:
更新操作SET Destination = SUBSTR(目的地,1, (INSTR(UPPER(目的地), '旧') - 1))
|| '新'|| SUBSTR(目的地, INSTR(UPPER(目的地), '旧')+ LENGTH( '旧'), LENGTH(目的地))在哪里 UPPER(Destination)LIKE'%OLD%';
谢谢你们! - 我会投两个答案,但我刚刚注册并且没有足够的声誉......