ORACLE SQL:替换部分文本字段忽略大小写

时间:2010-10-29 12:24:22

标签: sql oracle text

我需要替换存储在Oracle DB文本字段中的路径。但是,路径已经指定了不同的情况(即MYPATH,MyPath,Mypath,mypath)。使用REPLACEUPPER的组合时,它无法正常工作,即:

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 ...

3 个答案:

答案 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%';

谢谢你们! - 我会投两个答案,但我刚刚注册并且没有足够的声誉......