2017-05-23 3 views
0

Regexp_substr을 사용하여 등록 정보 필드에서 유닛을 추출하려고합니다. 다음은 쿼리입니다.Oracle Query on Regexp_substr

regexp_substr(PROPERTY,'(#)[^\S]+ ') 

결과 중 일부는 정확하지만, 다른 사람은 다시 아래와 같이 온 반면 :

#05-08 DOVER PARKVIEW 

는 내가 모든 알파벳이나 원문을 생략하기 위해 무엇을해야합니까 알 수 있습니까? 감사합니다.

+2

따라서 입력 문자열은 무엇이며, 당신이 필요로하는 결과가 무엇인가? BTW, 오라클 11g/12g 이상입니까? –

+2

그리고'[^ \ S]'와 (과) 일치시킬 계획이 있습니까? –

+0

유닛 번호 만 일치 시키려고합니다. # 05-08입니다. 하지만 이것은 하나의 형식 일 뿐이며 # 19-1215 또는 # 06-143과 같은 다른 유닛 번호가 있습니다. –

답변

1

[^\S] 패턴은 \ 및 대문자 인 S을 제외한 모든 문자와 일치합니다.

당신은 압축을 풉니 다 1+ 자리 -에 다음과 다시 # 후 자리를 1+ 캡처 만

regexp_substr(PROPERTY, '#(\d+-\d+)', 1, 1, NULL, 1) 

마지막 1 인수와 함께 경기의 일부를 추출하는 정규식 엔진을 알려줍니다 필요 ID가 1 인 캡처 그룹 (패턴의 유일한 캡처 그룹)입니다.

  • # - 리터럴 #
  • (\d+-\d+) - 캡처 정합 기 1 :
    • \d+ - 1 이상의 숫자
    • - - 하이픈
    • \d+ - 1 이상의 숫자.

는 참조 online demo :

select regexp_substr('#05-08 DOVER PARKVIEW', '#(\d+-\d+)', 1, 1, NULL, 1) as RESULT from dual 

enter image description here