2010-10-29 229 views
1

我需要替换存储在Oracle DB文本字段中的路径。但是,路径已经被指定了不同的情况(即MYPATH,MyPath,Mypath,mypath)。当使用REPLACEUPPER的结合,这是行不通的,因为我需要它,即:ORACLE SQL:替换部分文本字段忽略大小写

UPDATE Actions 
SET Destination = REPLACE(UPPER(Destination), 'MYPATH', 'My_New_Path') 

这不替换,但离开一切都在大写 - 即使那里有什么可替代

BEFORE:MyPath\FileName - AFTER:My_New_Path\FILENAME
BEFORE:DummyText - AFTER:DUMMYTEXT

我真正需要的是取代mypath中的任何事件,不管是CA的se到My_New_Path,而不接触其他行或其他部分的外壳

任何想法?我一直在抓我的头都无济于事......

PS:与Oracle 9个工作...

回答

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%'; 
+0

达恩,托尼类型比我更好! – symcbean 2010-10-29 12:36:27

1

我会用REGEXP_REPLACE建议(),但IIRC在Oracle的不可9.

事情是这样的,那么:

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' || '%'; 
1

组合式国+ 2个答案的调整使工作:

UPDATE操作中设置 目的地= SUBSTR(目标,1, (INSTR(UPPER(目的地), '老') - 1))
|| '新'|| SUBSTR(目的地, INSTR(上层(目的地),'老')+长度('老'), 长度(目的地))其中 上层(目的地)LIKE'%OLD%';

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

+0

作为提问者,您应该选择其中一个作为接受的答案 - 您不需要任何代表就可以做到这一点。 – 2010-11-01 01:45:32