2010-10-29 227 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