2010-02-12 70 views
3

我有它的值由一個前綴,然後一些價值:一列,e.g如何在Oracle SQL查詢中修剪前綴字符串?

ABC-Car 
ABC-Dog 
ABC-Suit 
CBR-Train 

在我的詢問,我想剪掉某些前綴,例如如果我修剪掉「ABC-」它將給我以下內容:

Car 
Dog 
Suit 
CBR-Train 

唯一的問題是,所有的字符都是有效的前綴之後的部分。因此,這可能,我可以有:

ABC-ABC-Cat 

我想這個調整值來返回:

ABC-Cat 

的TRIM和LTRIM功能似乎使用模式/字符匹配,而不是一次性的字符串匹配。有沒有辦法通過這些函數或其他內置函數來實現我想要的功能?

目前我想我將不得不使用CASE語句來檢查每個值開頭的前綴,如果它存在,SUBSTR關閉,否則返回列不變。希望有一個更簡單的方法。

回答

4

regexp_replace是你想用這個。

使用示例:

select regexp_replace('ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'Car' 
select regexp_replace('ABC-ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'ABC-Car' 
select regexp_replace('ABC-ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'CBR-Train' 
+0

許多感謝,大衛。 – 2010-02-12 19:53:07

+1

請注意,正則表達式函數是10g +。 – 2010-02-12 19:54:36

+0

@Ponies,它有時會讓你覺得你在跟隨我:你把它做成所有的SQL問題。 :) +1 – 2010-02-12 19:58:22