如何修剪Oracle SQL查询中的前缀字符串?

时间:2010-02-12 19:43:59

标签: sql oracle

我有一个列,其值由前缀和一些值组成,例如:

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

在我的查询中,我想删除某些前缀,例如:如果我删掉'ABC-'它会给我以下内容:

Car
Dog
Suit
CBR-Train

唯一的问题是,所有字符对前缀后的部分都有效。所以我可以拥有:

ABC-ABC-Cat

我希望这个修剪后的值返回:

ABC-Cat

TRIM和LTRIM函数似乎使用模式/字符匹配,而不是仅使用一次字符串匹配。有没有办法用这些函数或其他内置函数完成我想要的东西?

目前我认为我必须使用CASE语句在每个值的开头检查该前缀,如果它存在,则SUBSTR关闭,否则返回列不变。希望有一种更简单的方法。

1 个答案:

答案 0 :(得分:5)

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'