2010-02-12 4 views
3

은 내가 예를 들어, 특정 접두사를 잘라내 싶습니다 내 쿼리에서 값을 가진 후 접두사와 어떤 값으로 구성 열, 예컨대 :Oracle SQL 쿼리에서 접두어 문자열을 자르는 방법은 무엇입니까?

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

이 내가 다듬어 경우 'ABC-'다음과 같은 저를 줄 것이다 :

Car 
Dog 
Suit 
CBR-Train 

유일한 문제는, 모든 문자가 접두사 후 일부 유효합니다.

ABC-Cat 

트림과 LTRIM 함수는 한 번 전용 문자열 일치가 아니라 패턴 매칭/문자를 사용하여 나타납니다

ABC-ABC-Cat 

내가이 반환하는 값을 손질하려면 : 그래서 내가 할 수 가능합니다. 이 함수들 중 하나 또는 다른 내장 함수를 사용하여 원하는 것을 성취 할 수있는 방법이 있습니까?

현재 나는 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

많은 덕분에, 데이비드. –

+1

regex 함수는 10g +라는 점에 유의하십시오. –

+0

@Ponies, 때로는 당신이 나를 따라 다니는 것처럼 느껴질 것입니다 : 당신은 모든 SQL 질문에 그것을 만듭니다. :) +1 –

관련 문제