[SQL] 어떻게 오라클에서 정규 표현식에서 그룹을 추출하는?
SQL어떻게 오라클에서 정규 표현식에서 그룹을 추출하는?
나는이 쿼리를 가지고와 괄호 사이의 값을 추출 할.
select de_desc, regexp_substr(de_desc, '\[(.+)\]', 1)
from DATABASE
where col_name like '[%]';
그러나 그것은 이러한 "[TEST]"로 내게 브래킷 값을 제공한다. 난 그냥 "TEST"를 원한다. 어떻게 그걸 얻기 위해 쿼리를 수정합니까?
해결법
-
==============================
1.REGEXP_SUBSTR 함수의 세 번째 매개 변수는 검색을 시작하고자합니다 (예 de_desc)를 대상 문자열의 위치를 나타냅니다. 경기를 가정하면 문자열의 주어진 부분에서 발견된다, 그것은 반환 무엇에 영향을주지 않습니다.
REGEXP_SUBSTR 함수의 세 번째 매개 변수는 검색을 시작하고자합니다 (예 de_desc)를 대상 문자열의 위치를 나타냅니다. 경기를 가정하면 문자열의 주어진 부분에서 발견된다, 그것은 반환 무엇에 영향을주지 않습니다.
오라클 11g에서, 나는 당신이 돌려 원하는 캡처 그룹을 나타냅니다 사용하려고하는 것입니다 생각, 함수에 여섯 번째 매개 변수가있다. 적절한 사용의 예는 다음과 같습니다
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
어디에서 마지막 매개 변수 (1) 당신이 반환하려는 캡처 그룹의 수를 나타냅니다. 다음 매개 변수를 설명하는 문서에 대한 링크입니다.
10g는이 옵션이 표시되지 않습니다,하지만 경우에 당신은과 같은 결과를 얻을 수 있습니다 :
select substr( match, 2, length(match)-2 ) from ( SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual );
당신은 경기가 시작과 끝에서 정확히 하나의 여분의 문자가있을 것이라는 점을 알고 있기 때문이다. (다른 방법으로는 결과의 양쪽 끝에서 제거 브래킷에 RTRIM과 LTRIM를 사용할 수 있습니다.)
-
==============================
2.당신은 교체하고 전체 문자열과 일치하는 정규식 패턴을 사용 할 필요가있다.
당신은 교체하고 전체 문자열과 일치하는 정규식 패턴을 사용 할 필요가있다.
select regexp_replace(de_desc, '.*\[(.+)\].*', '\1') from DATABASE;
from https://stackoverflow.com/questions/7758859/how-to-extract-group-from-regular-expression-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] LIMIT 대안과 오라클에서 페이징 오프셋 [중복] (0) | 2020.05.01 |
---|---|
[SQL] SELECT 문에서 부울 유형을 사용하는 방법 (0) | 2020.05.01 |
[SQL] 나는 SQL에서 최대 (COUNT (*)를) 할 수 있습니까? (0) | 2020.05.01 |
[SQL] 엔티티 프레임 워크에 대한 SQL 그룹-으로 카운트 (0) | 2020.05.01 |
[SQL] 포스트 그레스 jsonb에 배열의 구조를 쿼리에 대한 적절한 지수는 무엇입니까? (0) | 2020.05.01 |