2016-07-05 5 views
1

하위 문자열 사이의 경계를 알아내는 데 문제가 있습니다. 예를 들어 문자열이 063016_shape_tea_cleanse__emshptea1_ 인 경우 emshptea1을 부분 문자열로 지정하려고하지만 문자열이 063016_shape_tea_cleanse__emshptea1_TESTDATA_HERE 인 경우에도 작동해야합니다.Teradata 하위 문자열이 범위를 벗어났습니다.

sel SUBSTR('063016_shape_tea_cleanse__emshptea1_',POSITION('__' IN '063016_shape_tea_cleanse__emshptea1_')+2, 
    POSITION('_' IN SUBSTR('063016_shape_tea_cleanse__emshptea1_',POSITION('__' IN '063016_shape_tea_cleanse__emshptea1_') + 2,CHARACTER_LENGTH('063016_shape_tea_cleanse__emshptea1_') - (POSITION('__' IN '063016_shape_tea_cleanse__emshptea1_') + 2)))-1) 

을하지만 그 -1로 문자열 (27)에 노력하고 그것으로 인해 밖으로 erroring된다

는 현재 내가있다.

+0

그래서''cleanse__' 다음의 모든 항목을 다음'_'까지 올리시겠습니까? –

답변

2

당신은 정규 표현식을 사용할 수 있습니다,이 __ 다음과 같은 _ 또는 문자열의 끝 사이에 모든 것을 추출합니다 :

REGEXP_SUBSTR(col, '(?<=__).+?(?=(_|$))') 

'(< =?)'는 모양 숨김, 즉 검색입니다 이전 문자를 결과에 추가하지 않고 여기에서 __

'으로 검색하십시오.'은 모든 문자, 하나 또는 여러 번 일치합니다. 이 문자열 ("탐욕"), '끝까지 일치할까요?' ("게으른")은이를 방지합니다.

'(? =)'은 미리보기 즉, 결과에 추가하지 않고 다음 문자를 검색합니다.

(|) 파이프는 여러 대안으로 표현식을 분할합니다. 여기에 밑줄 문자 또는 문자열의 끝 $

+0

감사합니다. 정규 표현식에서 모든 기호가 나타내는 것을 나에게 설명해 주시겠습니까? – Bob

+0

@BobDunakey : 설명을 추가했습니다. 정규 표현식은 매우 강력합니다, 나는 단지 기본을 알고 있습니다 :) – dnoeth

관련 문제