2009-08-21 99 views
3

我在我的oracle數據庫中有一列,其中正是我無法控制的原因包含一個CSV字符串,例如Oracle字符串替換

項目A,項目B,項目C,項目d

我想運行一個UPDATE語句來擺脫C項。從而結束了

項目A,B項,項目d

我怎樣才能做到這一點

回答

9

你可以使用Oracle REPLACE功能:

UPDATE table 
SET col = replace(col, 'item c', '') 

你只需要小心將其作爲CSV的一部分進行處理,例如剝下一個逗號。這可能意味着先替換'項目c',然後替換'項目c'來捕獲這兩種情況。


編輯:啊,我可能誤解了。我的解決方案是基於從CSV中刪除特定字符串 - 如果您希望始終替換第三個項目,那麼Vincent的答案就是您需要的答案

2

您可以使用INSTR和SUBSTR的組合來刪除第三個現場:

SQL> WITH a AS (SELECT 'Item a,Item b,Item c,Item d' col FROM dual) 
    2 SELECT substr(col, 1, instr(col, ',', 1, 2)) 
    3   || substr(col, instr(col, ',', 1, 3) + 1) sub 
    4  FROM a; 

SUB 
-------------------- 
Item a,Item b,Item d 
4

如果你有一個相當新的Oracle版本(我相信正則表達式中的Oracle 10進行了介紹),你可以使用REGEXP_REPLACE

UPDATE table SET column = REGEXP_REPLACE(column,'[^\,]+,','',1,3) 

(另外,請不要暴力的事情存儲的天才)

+0

請注意,如果CSV文件引用了包含逗號的字符串 「Smith,John」,123,2009-12-31' – 2009-08-21 21:32:16

+0

正則表達式支持正在迅速成爲我最喜歡的功能! ! – caddis 2009-08-31 14:28:52