我在我的oracle數據庫中有一列,其中正是我無法控制的原因包含一個CSV字符串,例如Oracle字符串替換
項目A,項目B,項目C,項目d
我想運行一個UPDATE語句來擺脫C項。從而結束了
項目A,B項,項目d
我怎樣才能做到這一點
我在我的oracle數據庫中有一列,其中正是我無法控制的原因包含一個CSV字符串,例如Oracle字符串替換
項目A,項目B,項目C,項目d
我想運行一個UPDATE語句來擺脫C項。從而結束了
項目A,B項,項目d
我怎樣才能做到這一點
你可以使用Oracle REPLACE功能:
UPDATE table
SET col = replace(col, 'item c', '')
你只需要小心將其作爲CSV的一部分進行處理,例如剝下一個逗號。這可能意味着先替換'項目c',然後替換'項目c'來捕獲這兩種情況。
編輯:啊,我可能誤解了。我的解決方案是基於從CSV中刪除特定字符串 - 如果您希望始終替換第三個項目,那麼Vincent的答案就是您需要的答案
您可以使用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
如果你有一個相當新的Oracle版本(我相信正則表達式中的Oracle 10進行了介紹),你可以使用REGEXP_REPLACE
:
UPDATE table SET column = REGEXP_REPLACE(column,'[^\,]+,','',1,3)
(另外,請不要暴力的事情存儲的天才)
請注意,如果CSV文件引用了包含逗號的字符串 「Smith,John」,123,2009-12-31' – 2009-08-21 21:32:16
正則表達式支持正在迅速成爲我最喜歡的功能! ! – caddis 2009-08-31 14:28:52